Ускорение сайта на Битрикс - пошаговая инструкция

Ускорение сайта на Битрикс - пошаговая инструкция

Если вы сюда попали, то вероятно ваш сайт на Битрикс тормозит и вам хочется его ускорить. В этой статье мы разберем, почему возникает эта проблема и что делать для исправления ситуации. Итак, приступим)

Почему тормозит сайт на Битрикс ?

Рассмотрим причины, почему сайт вообще может работать медленно. Их на самом не так и много, и в общем случае они делятся на 2 класса:

  • Долгая работа на стороне сервера

  • Долгая загрузка и работа на стороне клиента(браузера)

На скорость работы на стороне сервера влияют:

Основными проблемами на стороне клиента являются

Рассмотрим каждую проблему более подробно.

Какой хостинг нужен для сайтов на Битрикс ?

CMS 1C-Bitrix достаточно требовательна к ресурсам, точнее к их оптимальной настройке. На сайте Битрикс вы можете найти рекомендуемых хостинг-партнеров.

Мы в своей работе пользуемся услугами adminvps.ru
По промокоду MOLOTOK_HOSTING вы получаете скидку 30% на оплату хостинга.

Данная компания находится в лидерах рейтинга Битрикс среди хостеров, у них производительные конфигурации и довольно быстрая поддержка. К тому же при заказе сервера или VPS они сами их администрируют. Проверить производительность системы можно на административной странице по адресу:

Настройки – Производительность – Панель производительности

Панель производительности Битрикс

Производительность менее 30 уже является основанием для замены или оптимизации хостинга. Кое-что можно сделать и самому в админке сайта. Перейдите на страницу модулей и отключите неиспользуемые модули.

Настройки – Настройки продукта – Модули

Перед этой процедурой на всякий случай сделайте бекап, т.к. при удалении модуля могут быть удалены и его таблицы. Мы обычно рекомендуем отключить модуль веб-аналитики, т.к. его работу выполняют Яндекс.Метрика или Гугл.Аналитика. Так же можно отключить модуль компрессии, т.к. его работу выполняет GZIP. Остальное зависит от потребностей вашего проекта.

Следует учитывать, что производительность зависит от текущей нагрузки на сайт. Если в текущий момент происходит полный обмен с 1С, производительность будет ниже (возможно в разы), чем в обычном рабочем состоянии.

Ошибки в настройке системы

На панели производительности следует обратить внимание на Конфигурацию, она должна быть отмечена как «Оптимально». Версия РНР рекомендуется не ниже 7.0, т.к. она практически вдвое быстрее 5.Х версий. Непосредственно к скорости работы это отношения не имеет, но сайт должен проходить проверку по адресу:

Настройки – Инструменты – Проверка системы.

Так же стоит обратить внимание на настройки сервера базы данных. 

Настройки – Производительность – Сервер БД.


Мониторинг работы БД в Битрикс


В идеале не должно быть «красных» значений, все рекомендации должны быть выполнены. Под сервер БД рекомендуется отводить порядка 70-80 % оперативной памяти сервера. Заметим, что данные настройки не стоит изменять самостоятельно, если вы не знаете на 100%, как это делать. Можно вызвать ошибку MySQL сервера и ваш сайт вообще перестанет работать.

Настройка кеширования в Битрикс

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

Чтобы проверить, настроено ли у вас кеширование, нужно пройти на страницу

Настройки – Настройки продукта – Автокеширование

Автокеширование Битрикс


Вы должны видеть, что кеширование у вас включено и работает. Если оно отключено, включаем и обязательно проверяем работу сайта, причем страницу надо открыть 2 раза. Наиболее частые ошибки при рабочем кеше – некорректная работа мета тегов title и description. На глаз можно и не заметить разницы, поэтому следует просматривать и код страницы.

Далее, кеширование нужно проверить в публичной части сайта с помощью административной панели.

Для этого нажимаем на кнопку «Отладка» и смотрим в левом нижнем углу информацию о скорости построения страницы.


Режим отладки Битрикс


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

В нашем случае мы видим первую загрузку за 0.95 секунд, вторую за 0.28.

Режим отладки Битрикс с кешем


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

Частый сброс кеша – еще одна распространенная проблема. Если у вас работает контент менеджер, то он будет сбрасывать кеш со всего каталога каждый раз, когда сохраняет один из его элементов. А если этих элементов у вас десятки тысяч? Во-первых, сама процедура сброса будет отнимать ресурсы у сайта. Во-вторых, толку от вашего кеширования будет немного, так как каждые 3-5 минут он будет сбрасываться. Для исправления ситуации есть 2 пути:

  • вынести изменение контента за пределы сайта, например, на сторону 1С или Моего Склада и выгружать изменения раз в сутки

  • выключить управляемый кеш и настроить оптимальное время кеширования компонентов

Выключить управляемый кеш можно по адресу:

Настройки – Настройки продукта – Настройки кеширования

Ошибки разработки, которые тормозят сайт на Битрикс

В сайтах на 1С-Битрикс есть собственный механизм поиска ошибок разработки, и поиск проблем следует начинать именно с него.

В уже упомянутом механизме Настройки – Производительность – Панель производительности есть вкладка Разработка, куда помещаются страницы, создающие самую большую нагрузку. Данный инструмент хорош тем, что позволяет видеть все хиты, а не только те, что видны в публичной части. Например, был случай, когда основную нагрузку создавал ajax запрос, который никак не проявлял себя при обходе сайта. На скриншоте ниже видно, что основную нагрузку создает страница каталог.


Ошибки разработки в Битрикс


Для выявления ошибок разработки нам поможет все тот же механизм «Отладка». С помощью него можно вычислить, какой из компонентов выполняется слишком много времени.

Для примера рассмотрим такую картину: карточка товара, отрабатывает за 6 секунд.

Детальный анализ показывает, что меню строиться 1,5 секунды, и еще 4,5 секунды занимает компонент element.detail.


Ошибки разработки в каталоге

Ошибки разработки в меню

Теперь мы знаем куда копать, и находим с помощью отладки куски кода, которые занимают максимальное время. Для отладки можно использовать как РНР функцию microtime(), так и более совершенные инструменты – xdebug или XHProf. Тут важно отметить, что не рекомендуется использовать xdebug на боевых сайтах, т.к. он довольно сильно замедляет работу. И если уж вы использовали его на боевом проекте, проследите за тем, чтобы после отладки модуль был отключен. На выходе вы должны получить список мест, где ваш проект тормозит больше всего. Далее, оптимизируем код, сохраняя бизнес логику. Бывают случаи, когда и вовсе приходится менять логику работы, либо выносить тяжелые вычисления на агентов или крон.

Ошибки в архитектуре и настройках веб сайта

Пожалуй, это наиболее существенная проблема из всех описанных. Бывает, что проще с нуля проект разработать, чем пытаться исправить ошибки проектирования. Приведем пример: на одном сайте для вывода раздела каталога выполнялась выборка всех элементов и всех разделов. Работала она 6-8 секунд, и если сбрасывался кеш, то сайт просто «умирал». А для исправления ситуации надо было разделить данные на несколько инфоблоков, и перестроить работу на стандартные компоненты. Вообще, если у вас много разделов и в этих разделах много уникальных свойств, постарайтесь разделить их на отдельные инфоблоки. Это конечно создаст новые проблемы с совместным выводом элементов, но это по крайней мере решаемо :)

Другой момент, замедляющий работу – это обращение к внешним сервисам. Чаще всего это сбор курсов валют, информер погоды или служба доставки. Если вы получаете эти данные в коде страницы, то гарантированно затормозите этим сайт. Подобный функционал следует подключать либо на кроне, либо переводить на аякс запрос, а пока он выполняется показывать пользователю заглушку или прелоадер.

Следует проверить, чтобы работа агентов выполнялась на кроне, а не на хитах. В противном случае посетители будут ждать пока отправятся письма и построится фид в Яндекс.Маркет. Перевести агенты на крон поможет урок из курса для разработчиков

dev.1c-bitrix.ru

Либо модуль, который работает только на виртуальных машинах BitrixVM

https://marketplace.1c-bitrix.ru/solutions/askaron.agents/

Проверить работу агентов можно на странице «Проверка системы».

В настройках главного модуля следует включить быструю отдачу файлов через Nginx.


Не оптимизированная графика

Наиболее частый сценарий – это использование размеров изображений, которые не соответствуют отображению в браузере. Например, у нас на странице выводится список товаров с картинками. Сам контейнер в браузере имеет размер 152 * 190 пикселей, а вот картинка при этом используется 400 * 500 пикселей.

Ошибки в размещении изображений Битрикс

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

https://dev.1c-bitrix.ru/api_help/main/reference/cfile/resizeimageget.php

Вторым моментом, влияющим на скорость загрузки, является непосредственный «вес» картинки. Чтобы его уменьшить, целесообразно использовать дополнительные модули сжатия на сервере, такие как jpegoptim и optipng.

Для автоматического сжатия есть отличный модуль, который мы используем в своих проектах

https://marketplace.1c-bitrix.ru/solutions/dev2fun.imagecompress/

Для подготовки изображений, используемых в верстке сайта, рекомендуется использовать сервис:

https://tinypng.com

Третий момент - это количество картинок. Если в списке товаров десятки карточек, то пользователь не видит их все сразу. Особенно в мобильной версии, пользователь может и не долистать до конца страницы. А картинки ведь грузятся, и тормозят процесс загрузки остального контента. И тут нам на помощь приходит такой метод, как lazy load. Это Jquery плагин, скачать можно тут:

https://appelsiini.net/projects/lazyload/

$("img.lazyload").lazyload(); //вызов метода

Суть метода заключается в постепенной загрузке изображений, по мере того, как пользователь до них доходит. Уточним, что если вы используете AJAX подгрузку товаров в каталог (кнопка «Показать еще»), то после каждой загрузки нужно повторно инициализировать данный плагин.

И напоследок о картинках. Лучше использовать для графики формат jpeg нежели png. Разницы в отображении не заметно, зато можно сэкономить на размере изображения.

Сжатие ресурсов сайта

Тут следует остановиться на 2х моментах:

  • Сжатие средствами Битрикс,

  • Сжатие на стороне сервера.

Битрикс своими силами может сжимать и склеивать файлы скриптов и стилей. Включается это в настройках главного модуля по адресу:

Настройки – Настройки продукта – Настройки модулей

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

Сжатие средствами Битрикс

Объединять файлы CSS и JS надо в любом случае, это серьезно ускоряет загрузку файлов, т.к. позволяет вместо 20 подключений задействовать всего 1 или 2. Стоит отметить, что будут объединены файлы, которые подключены средствами Битрикс через методы SetAdditionalCSS и AddHeadScript, или их D7 аналоги. Файлы, подключенные напрямую через теги link или script в объединении не участвуют.

С переносом JS в конец страницы нужно быть аккуратным, особенно если проект достался вам на поддержку в наследство. Может случится ситуация, когда у вас инлайном прописана функция, которая использует подключаемые файлы. Это может быть обращение к методу JQuery. После переноса файлов в конец страницы следует внимательно пройтись по всему проекту и проверить его на предмет ошибок javascript в консоли.

На стороне сервера должна быть настроена работа модуля GZIP. Данная служба необходима для сжатия передаваемых данных. В виртуальной машине Битрикс модуль включен по умолчанию, в популярных панелях хостинга настраивается на странице редактирования домена. Если не найдете, напишите в поддержку хостинга, думаю не откажут.

Есть много сервисов проверки на то, включено ли у вас GZIP сжатие. В тесте мы воспользовались вот этим:

https://www.websiteplanet.com/ru/webtools/gzip-compression/

GZIP сжатие в Битрикс

Видно, что данный метод позволяет экономить порядка 75% трафика, что особенно актуально для мобильных устройств.

Избыточные стили и скрипты

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

Какого-либо механизма для автоматического обнаружение неиспользуемых скриптов мы не нашли, все проверяется вручную. Тут все зависит от контекста и вы можете использовать console.log() либо точки остановки для того, чтобы понять, попали вы в скрипт или нет.

Чтобы вычислить, какие стили не используются на вашем проекте, поможет инструмент в браузере FireFox под названием csscoverage. Как с ним работать читайте в статье Как удалить лишние CSS стили на сайте.

Следует разделять стили по разным файлам, это так же ускорит отрисовку вашей страницы. Например, на странице каталога ни к чему стили, используемые при оформлении заказа.

Еще одна хитрость, позволяющая получить очки в сервисе https://developers.google.com/speed/pagespeed/insights/ - это разделение стилей на первичные и вторичные. Грубо говоря –это стили, отвечающие за первый экран и все остальные. В этом случае загрузка вторичных стилей не будет блокировать отображение контента, и пользователь быстрее увидит страницу.

Сторонние плагины и скрипты

Тут правило простое: все что вы навешиваете на ваш сайт замедляет его работу. Будь то Яндекс.Метрика, Гугл Tagmanager, Онлайн чат или скрипт сбора статистики, вроде RetailRocket. Встречаются проекты, где этого добра навешано столько, что до момента начала нормального взаимодействия с пользователем проходит 10-20 секунд. Вычислить подобные подключения нам поможет вкладка Сеть(Network) в панели разработчика.

Сторонние скрипты в Битрикс

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

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

Слишком большое дерево тегов

Общее правило веб-разработки гласит: можешь обойтись без лишнего элемента – обходись. Приведем пример: тут можно было не оборачивать строку в дополнительный span.

Дерево тегов

Конечно, единичный случай погоды не делает. Но бывает так, что подобным мусором забито до 20% проекта, что в конечном счете сказывается на производительности.

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

Вывод

Используя данные рекомендации, вы будете знать куда копать для ускорения вашего сайта или интернет магазина на Битрикс. Например, нам удалось поднять скорость загрузки сайта для одного клиента на поддержке в 3 раза. Ну, а если нет возможности или желания разбираться в этом самостоятельно, обращайтесь к нам и мы устраним проблему в кратчайшие сроки и за адекватную цену.

  • 18.04.2019
Возврат к списку