Получить 50+ способов увеличения продаж в интернет-магазине

Свинья на реактивном приводе

Ускоряем Битрикс адекватными и неадекватными методами


Битрикс тормозит

Такое заявление мы часто слышим от руко…ногих программистов и их несчастных доверчивых заказчиков.
Один несчастный человек назвал мне свой сайт "свиньей на реактивном приводе". Вроде и движок мощный, а летит как-то не туда.
В этой статье я решил описать десяток способов ускорить сайт на битриксе до разумных и приемлемых скоростей.
Приемлемым мы назовем открытие страницы за 1 секунду, либо быстрее.
Здесь мы не будем смотреть на Google Pagespeed. Тест, для которого 10кб CSS, вынесенные в отдельный файл, хуже, чем 200 килобайт, встроенных в страницу. Единственный тестер, которому можно доверять, это ваш собственный браузер при скорости интернета выше 2-3 мегабит.

Выделим 4 способа ускорить сайт
  • Базовые настройки
  • Оптимизация кода
  • Лайфхаки настроек
  • Кеширование и композит

И так, с чего начнем?

С обязательных тестов

Открываем страницу «панель производительности» 
2017-08-15_08-41-49.png
Нажимаем «тестировать производительность» и смотрим отчет. Тестировать конечно, нужно при отсутствии нагрузки, иначе данные будут сильно искажены.

Что здесь важно

Базовые возможности хостинга. Это время чтения, записи, отклика, SQL запроса
Если они сильно (в 5-10 раз) меньше эталонных, то поздравляю - у вас кривой хостинг, который сильно экономит на серверах. Такой хостинг смело меняем. 

Идем дальше

Конфигурация PHP - ссылка «Рекомендации»
Здесь важны сами настройки. Большинство хостинг-платформ соответствуют рекомендованным параметрам Битрикс, но если вы настраивали сервер сами, то стоит привести его настройки в соответствие с рекомендациями. Также обратите внимание на то, установлен ли препроцессор PHP. Без него скорость системы будет существенно ниже.
Итог наших настроек - быстро работающие страницы админки. Если админ-панель открывается быстро, а страницы сайта - медленно, то поздравляю. Ваш код нуждается в отладке. Ей и займемся на следующем шаге.


Отладка кода

Список страниц, оказывающих максимальную нагрузку, легко получить на соответствующих вкладках в панели производительности, описанной выше.
Выбираем самую медленную страницу сайта. И нажимаем кнопку «отладка» в панели администратора 
2017-08-15_08-48-12.png
Теперь под каждым компонентом на странице появится время, за которое он генерируется и число SQL запросов, необходимое для этого. Страницу можно открыть в обычном режиме, а можно при помощи кнопки «сбросить кеш»  

2017-08-15_08-49-59.png 
для отладки нам понадобится знать скорость генерирования страницы до кеширования и то, насколько хорошо на ней кешируются данные.

Начнем с времени генерирования страницы

Оно отображается внизу страницы. Если нажать на него, появится раскладка по времени, какой компонент сколько времени потребовал. Далее начинаем разбираться с наиболее затратными компонентами. Суммарно ваша страница при отключенном кеше должна генерироваться не более 1-1.5 секунды и тратить на это не более 200 sql-запросов.
Что обычно создает нагрузку при генерировании страницы
Первая и основная ошибка - SQL запрос, вложенный в PHP цикл. Например, ваш код или код компонента генерирует список товаров. PHP-код получает этот список и для каждого товара отдельным запросом извлекает цену. Это одна из самых распространенных ошибок. Если на странице допустим, 50 товаров и по каждому мы узнаем группу пользователя, цену для этой группы и 2-3 свойства, то на выходе уже 250 лишних запросов. А вы спрашиваете, почему сайт тормозил? :-)

Еще одна функция - расчет скидок. Сайт может иметь очень сложную систему скидок и если рассчитывать их для каждого товара и каждой группы пользователей при генерировании страницы, то счет запросов может идти на тысячи.



Базовые настройки

Тут разберу настройки, которые в разы наращивают требовательность системы к ресурсам.

Список свойств в выдаче. В любом компоненте в настройках можно настроить, какие именно свойства будут вытаскиваться из базы. Нужно в настройках отсечь все лишние.

Список цен в выдаче. Аналогичным образом оставляем только цены актуального пользователя.

Учитывать права доступа инфоблока. В большинстве случаев эта настройка в компонентах не нужна - она только тратит ресурсы системы.

Время кеширования. Это непростая настройка. Ее мы разберем чуть позже, потому что у нее довольно много подводных камней, в том числе делающих кеширование совершенно бесполезным.

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


Лайфхаки


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

Какие «узкие места» есть у Битрикса и как с ними бороться

Вложенность разделов
Если разделов более 2000, то при обращении к ним, система будет существенно тормозить. В этом случае лучше переделать структуру сайта. разбить корневые разделы на отдельные инфоблоки. В чем причина? В том, что битрикс выводит все разделы списком в формах редактирования элемента и в подборе элементов. Что и создает зверские тормоза.

Обращения в файловой таблице
Компонент каталога проверяет фото товаров по таблице файлов при каждом формировании страницы. Кастомизировав компонент, эту функцию можно отключить. Дает прирост скорости на 20-30%

Кеширование
Больная вещь в кешировании каталога состоит в том, что так называемый «управляемый кеш» битрикса живет ровно до ближайшей записи в инфоблок. А после этого - стирается. А теперь представим себе, что сайт работает достаточно активно и изменения в товарах (приходы, расходы), происходят почти непрерывно. Можно считать, что на таком сайте вообще нет кеша. Какие варианты решения?

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

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


И о приятном

Композитный сайт
Реально. Ускоряет. В 10 раз.
Если вы не поленитесь его настроить (а это довольно просто), то сайт начнет буквально «летать». Только важно - он не заменяет нормального кеширования компонентов. Он работает только если это самое кеширование уже корректно настроено.

Завершу статью небольшим чек-листом на работу битрикс ускорения
  • Настройки в мониторе производительности соответствуют рекомендуемым
  • Все компоненты настроены на кеширование
  • SQL-запросы не вызываются в циклах
  • Страница формируется с функцией «Очистить кеш» не более чем 200 SQL-запросами
  • Компоненты работают только со свойствами, которые им нужны
  • Проверка прав доступа отключена там, где не нужна
  • Если на сайте много скидок, сайт рассчитывает их только там, где нужно
  • Кеширование фильтров включено
  • При кешировании учитывается периодичность обновления
  • Настроен композитный сайт

Если при всем этом сайт все еще «тормоз» - добро пожаловать к нам. 
Быстро, дорого, эффективно :-)

Читайте так же

Обсудить проект

Обсудить