Как это работает: Ozonru.kz

Нас часто спрашивают, как мы реализовываем наши проекты и какие технические решения используем. Поэтому я буду стараться регулярно писать об этом в нашем блоге.

Большинство проектов, как золотой сертифицированный партнер 1С-Битрикс, мы реализуем на данной CMS-платформе. Главное ее достоинство в том, что можно четко спрогнозировать время и этапы разработки проектов в условиях сжатых сроков.

OZONRU.KZ - представительство российского онлайн-гипермаркета в Казахстане.

Поскольку мы давно сотрудничаем с компанией Ozon, нам пришла очередная задача: в кратчайшие сроки собрать полноценный интернет-магазин с интеграцией во внутреннюю систему компании. Проект мы реализовали, запустили в коммерческое использование, и теперь настал черед рассказать, как мы его сделали.

Главная трудность, с которой мы столкнулись – это большая внешняя база данных (БД) товаров и большая нагрузка на БД при работе каталога.

1С-Битрикс может работать на стандартном хостинге при количестве товаров в 400 000 наименований.

Когда в каталог выложили 250 000 товаров, база данных сайта, выполненная на стандартных компонентах, поперхнулась и ушла в глубокий нокаут.

По нашему опыту, стандартные компоненты сносно работают до 20 000 наименований товаров. Чтобы система работала при большем количестве товаров, необходимо или увеличивать серверные ресурсы, или разгонять Битрикс.

Перед тем как увеличивать серверные ресурсы, надо исчерпать все ресурсы по оптимизации проекта.

Думаю, что все решения, которые я опишу дальше, подойдут для большинства сайтов, где используется большое количество инфоблоков.

Стандартные средства оптимизации:

  1. Оптимизация запросов и создание индексов. В теории помогает, но реально нам никакого прироста это не дало.
  2. Обязательное включение кэширования всех необходимых компонентов и элементов. Если идет работа напрямую через API платформы - тоже обязательно кэширование.

Кстати, разные типы кэширования мы уже сравнивали. А для этого проекта выбрали memcache, с возможностью дальнейшего расширения на многосерверную архитектуру.

Начальные настройки

  1. Отключаем все ненужные модули (особенно веб-аналитику и, по возможности, рекламу - экономим запросы к БД).
  2. Обязательно выносим свойства инфоблоков в отдельную таблицу.
  3. В компонентах отключаем: счетчик посещений, проверку прав доступа, подсчет количества товаров в разделах; включаем кэширование при установленном фильтре.

Компоненты

Выбрасываем весь интерфейс «Эрмитаж». При таком количестве товаров никто не будет пользоваться публичным интерфейсом администрирования – это не удобно, все товары синхронизируются с корпоративной системой.

Компонент bitrix:catalog.section
Выбрасываем строчки с конвертацией валюты:
if ('Y' == $arParams['CONVERT_CURRENCY'])....

Из $arrFilter убираем:
"IBLOCK_LID" => SITE_ID,
"IBLOCK_ACTIVE" => "Y",
"ACTIVE_DATE" => "Y",
"CHECK_PERMISSIONS" => "Y",
"MIN_PERMISSION" => "R",

INCLUDE_SUBSECTIONS - от этого параметра никуда не деться, в принципе, структура в Битриксе неплохая, такой запрос не будет сильно тормозить

$arParams["FIELD_CODE"] включаем в $arSelect, убираем DISPLAY_PROPERTIES

Считаем цены одним запросом:
CPrice::GetList(array(), array("PRODUCT_ID" => $arResult["ELEMENTS"], "CATALOG_GROUP_ID" => $arPriceTypeID));

Если необходимо, конвертируем цены в другую валюту: CCurrencyRates::ConvertCurrency - для необходимых цен.

Удаляем все, что касается интерфейса «Эрмитаж».

Компонент bitrix:section.list

Убираем все, по аналогии с предыдущим компонентом.
Подсчет количества товаров - выносим в отдельное пользовательское свойство; подсчет, который будет запускать отдельно, например, ночью, выносим в отдельный скрипт.

Компонент bitrix:smart.filter

Тут и комментировать нечего - переписали с использованием прямых mysql-запросов в базу.

Остальные используемые компоненты оптимизировали по такому же принципу.

Как стал работать проект

Скорость работы сайта увеличилась - с 15 - 30 секунд до 0,5 - 1 секунды загрузки одной страницы, что является отличным результатом. А если страница в кэше, то она выдается мгновенно. При этом мы не увеличили серверные ресурсы, а использовали наш стандартный хостинговый тариф.

Экспериментируйте! Есть отличный инструмент – «Отладка»:

По каждому компоненту есть статистика:

И запросы:

Поэтому изменяйте настройки компонентов, правьте компоненты под ваши нужды - и сайт у вас будет работать быстро.

А вот наращивание серверных ресурсов - это отдельная большая тема.

Во второй части статьи я разберу систему синхронизации с корпоративной системой и покажу интерфейсы управления импортом товаров.

Координационный
совет SPECIA