За последние три года мы оптимизировали производительность многих проектов на 1С-Битрикс. Среди них были как новые сайты, которые размещались на хостинге впервые, так и проекты, перенесённые с других хостингов и корпоративных серверов.
В этой статье вы узнаете основные шаги, которые мы рекомендуем, чтобы увеличить производительность сайта и сделать его более быстрым для посетителей и поисковых систем.
Если пройти эти шаги последовательно, то можно увеличить производительность даже очень медленных сайтов, которые показывают 20-30 пунктов по шкале Битрикс, до 100 пунктов и выше.
С помощью правильных настроек вполне реально сделать так, чтобы “тормозной” сайт стал “летать” и радовать посетителей удобством и высокой скоростью.
Итак, вот 14 шагов для оптимизации сайта на 1С-Битрикс:
Рассмотрим каждый из этих шагов подробнее.
Производительность сайта зависит от серверных мощностей – количества ядер и частоты процессора, объёма оперативной памяти, типа и ёмкости дисков.
Если вы настраиваете хостинг для нового проекта, важно выбрать конфигурацию сервера, соответствующую “прожорливости” сайта и предполагаемому уровню нагрузки. А уже затем делать тонкую настройку на основе мониторинга производительности.
Мы знаем, что Битрикс очень чувствителен к частоте процессора, скорости дисков и объёму памяти. Поэтому в шаблонах хостинга Максиплэйс предусмотрено несколько готовых конфигураций. На них большинство сайтов, которые переезжают к нам с обычных хостингов, сразу начинают показывать более высокую производительность.
Для сайтов компаний и интернет-магазинов с небольшой посещаемостью будет достаточно 1-2 ядер процессора, 2 Гб оперативной памяти и до 30 Гб на SSD-диске. Эта конфигурация подойдет и для тех, кто только запустил сайт и ещё не замерил нагрузку от посещаемости.
Если же ваш сайт достаточно “тяжёлый”, понадобится больше ресурсов. Так, для сайтов с высокой посещаемостью, а также интернет-магазинов с большим каталогом товаров или порталов, например, Битрикс24, мы рекомендуем использовать тариф “MIDDLE” с 4 ядрами процессора, 4 Гб RAM и 80 Гб на SSD-диске.
По стоимости переход с минимальной конфигурации на среднюю сопоставим со стоимостью одного (!) небольшого заказа в интернет-магазине (около 2 тыс. рублей). А результатом может быть как рост заказов за счёт ускорения работы сайта, так и повышение позиций сайта в поисковой выдаче.
После усиления или оптимизации “железа” переходим к настройке окружения и самого сайта.
Если вы настраиваете хостинг для нового проекта, важно выбрать конфигурацию сервера, соответствующую “прожорливости” сайта и предполагаемому уровню нагрузки. А уже затем делать тонкую настройку на основе мониторинга производительности.
Мы рекомендуем использовать на хостинге специализированное окружение – виртуальную машину BitrixVM, рекомендованную разработчиками платформы 1С-Битрикс.
«1C-Битрикс: Виртуальная машина» – это виртуальный сервер, полностью настроенный, протестированный и предназначенный для оптимальной работы с сайтами на «1С-Битрикс».
В нём уже учтены многие параметры, влияющие на производительность. Набор ПО и связка веб-сервисов уже настроена, чтобы обеспечить оптимальную работу сайта на 1С-Битрикс или портала Битрикс24.
Если же вы не используете окружение Битрикс, а самостоятельно конфигурируете среду на своём VPS-сервере, обратите внимание на режим использования php как модуль apache. Эту опцию вы увидите в настройках и можете использовать её для ускорения работы Битрикс. При этом есть много нюансов, так как при высокой нагрузке предпочтительным окажется другой режим, и придётся привлекать специалиста.
Поэтому для удобства и скорости развёртывания мы рекомендуем использовать готовое и многократно протестированное окружение BitrixVM. Мы используем его для всех клиентских проектов на платформе Битрикс.
Если вы устанавливали виртуальную машину больше года назад, скорее всего, у вас стоит одна из старых версий PHP.
Нужно проверить версию PHP и обновить её до 7.x, т.к. новые версии работают быстрее.
Когда основа серверной части настроена, пора переходить к настройкам, которые делаются из админ-панели 1С-Битрикс.
Большинство файлов стилей и скриптов не используются на начальном этапе загрузки страницы, поэтому их стоит перенести в самый конец. При этом минификация и объединение сократят их вес и снизят количество запросов.
В настройках главного модуля необходимо выставить галочки, как показано на скриншоте ниже.
Очень важно учесть момент подключения файлов скриптов и стилей, они должны быть подключены следующим образом:
//Правильно
use Bitrix\\Main\\Page\\Asset;
Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . "/js/main.js");
Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . "/css/style.css");
Это важно, так как в случае статического подключения, оптимизировать файлы не удастся.
<? //Неправильно ?>
<script src="/js/main.js"></script>
<link href="/css/style.css" rel="stylesheet">
Уже только это может дать ощутимое ускорение загрузки страниц сайта.
Основным "тяжелым" ресурсом на веб-странице являются изображения. Чем больше их вес, тем медленнее загружается страница.
Для Битрикса существует отличное бесплатное решение для оптимизации изображений без потери качества. Работает оно буквально в один клик.
Часто веб-мастера упускают оптимизацию изображений, а зря. Нам приходилось встречать сайты, где в плейсхолдеры 300х400 пикселей вставлены картинки размером 1200х1600.
Представьте, насколько медленно грузится такой интернет-магазин, если в его каталоге 40 тысяч товаров.
Подключение плагина в шаблоне сайта
use Bitrix\Main\Page\Asset;
Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . "/js/jquery.min.js");
Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . "/js/jquery.lazyloading.min.js.js");
Инициализация плагина для выбранного класса изображений
$(function () { $('.lazy-img').Lazy(); });
Изображениям необходимо добавить выбранный класс .lazy-img
, а также заменить атрибут src
на data-src
<img data-src="<?=$arItem["PREVIEW_PICTURE"]["SRC"]?>" class="lazy-img"/>
Для решения проблемы с изображениями являющимися background-ом, вместо css свойства background: url(/images/cloud.jpg) следует добавить класс .lazy-img
и атрибут data-src
для блока
<div class="lazy-img" data-src="/images/cloud.jpg"></div>
Эта настройка определяет частоту обновления информации на странице.
Если информация на сайте обновляется раз в сутки, то ошибочно будет оставлять время жизни кэша по умолчанию (3600 с). Необходимо выставить значение 24 часа (86400 с), иначе каждый час посетитель будет заново загружать контент с сервера.
Этот параметр важно учитывать и выставлять с учётом периода реального обновления информации на сервере.
Когда мы переносим сайты на хостинг, в нашем шаблоне он включен по умолчанию. Проверьте в настройках сайта (dbconn), что этот механизм включен и используется, потому что он также обеспечивает ускорение в работе.
Битрикс предоставляет возможность использовать технологию CDN (Content Delivery Network), которая позволяет загружать картинки, стили и скрипты с сервера, находящегося ближе всего к пользователю. Это увеличивает скорость загрузки всей страницы.
Для включения данной опции необходимо перейти в Настройки - Облако 1С-Битрикс - Ускорение сайта (CDN).
После включения CDN произведите замер скорости загрузки для исключения противоположного эффекта.
В Также в панели есть инструмент измерения скорости загрузки отклика сайта. Он измеряет скорость загрузки сайта у посетителей.
Этот тест показывает четыре зоны - “Очень быстро”, “Быстро”, “Медленно” и “Очень медленно”, а также среднее время загрузки. Рассчитывается для 1000 последних посетителей вашего сайта. Скорость сайта фактически показывает, как быстро отобразился ваш сайт для большинства из этих 1000 посетителей.
В настройках БД важно проверить несколько параметров.
Если мы говорим про современные проекты, которые переносим с других серверов, проверьте, что тип таблиц в базе – InnoDB.
Сайты с этим типом таблиц работают быстрее и надёжнее с точки зрения сохранности данных. Это соответствует рекомендациям Битрикс.
Общая рекомендация - проверять и выставлять innodb buffer pool size примерно равным объёму БД.
В шаблоне BitrixVM он настраивается автоматически в зависимости от объема оперативной памяти на сервере.
Данный механизм позволяет сэкономить время на выдаче результата запроса.
Например, вы решили найти на сайте информацию о BMW M5. Без использования фасетного индекса поиск осуществлялся бы сначала по маркам автомобилей, а затем по модельному ряду. Фасетные индексы заранее предопределяют возможные варианты и поиск выдаст результат быстрее.Для создания фасетного индекса необходимо, чтобы свойства товара присутствовали в умном фильтре. После чего во вкладке Контент - Инфоблоки - Фасетные индексы следует запустить процесс создания индексов.
Заходим в панель управления сайтом. Переходим в раздел
Настройки > Настройки продукта > Композитный сайт > Настройки > Композит
Нажимаем "Включить композит"
Также нужно установить время жизни кэша сутки (86400 сек), так как 120 секунд ухудшат производительность.
Включаем настройки nginx для композитного сайта через утилиту командной строки
/opt/webdir/bin/bx-sites -o json -a composite --enable --site=default
(вместо default, если нужно, вписываем имя требуемого сайта)
Для отключения, соответственно:
/opt/webdir/bin/bx-sites -o json -a composite --disable --site=default
К ним можно отнести AD/LDAP интеграцию, Push and Pull, Wiki, А/B-тестирование, Веб-аналитику, Веб-кластер, Веб-мессенджер, Веб-сервисы, Дизайнер бизнес-процессов, Документооборот, Календарь событий, Конструктор отчетов, Менеджер идей, Мобильную платформу, Мобильное приложение для интернет-магазина, Обучение, Перевод, Почту, Техподдержку, Универсальные списки, Управление масштабированием, а также модуль интеграции с “Битрикс24”. Все они отрицательно влияют на производительность. Поэтому неиспользуемые модули важно отключить.
Другой пример такого модуля – “Сайты24”, который позволяет быстро создавать простые сайты на 1С-Битрикс без веб-разработчика. Его тоже можно отключить, чтобы ускорить работу основного сайта.
Часто к нам обращаются клиенты с такой проблемой: начал тормозить сайт, который до этого работал хорошо.
Например, инженеры анализируют нагрузку и видят, что большинство запросов идёт со стороны сервиса MySQL. При этом по данным мониторинга за предыдущие дни повышенной загрузки раньше не было.
Сначала инженеры пробуют выяснить у клиента, что именно менялось на сайте. И если клиент не может сказать точно, тогда инженеры с помощью специальных утилит отслеживания, смотрят, какие запросы выполняются медленно или создают высокую нагрузку на базу данных.
Это утилиты:
mytop
mysqldumpslow
pt-query-digest (требуется, если установлен Percona Server)
Иногда видно, что на сайте появились ресурсоёмкие циклические запросы, которые и тормозят работу.
Мы указываем на них заказчику. Он понимает, какими изменениями кода они вызваны, и принимает меры, чтобы исправить ситуацию.
Что-то из этого можно увидеть в админке Битрикса самостоятельно, включив отслеживание производительности и не обращаясь к инженерам. Это поможет понять, какие изменения на сайте или в логике его работы приводят к таким тормозящим запросам.
В панели производительности есть возможность посмотреть на показатели и проанализировать детально скорость загрузки страниц.
Несколько вариантов конфига mysql, где включить логирование:
/etc/my.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf
/etc/my.cnf.d/server.cnf
/etc/mysql/conf.d/bx_replica.cnf
[mysqld]
slow_query_log = 1
long_query_time = 5 # нужное количество в секундах
slow_query_log_file = /var/log/mysql/mysql-slow.log
Рекомендуется включить режим диагностики и походить по своему сайту. Битрикс фиксирует это в диагностическом модуле и показывает, что вызвало задержки. Также можно посмотреть самые частые и самые медленные запросы к БД. И на основе этих данных решить, что можно оптимизировать в коде сайта.
При отключении неиспользуемых модулей можно сразу получить прирост производительности в 10-20 пунктов.
Оптимизация запросов MySQL может дать очень много в зависимости от самих запросов. Если сайт работал совсем медленно, показывая индекс 20-30, то после ликвидации медленного запроса индекс может подняться до 100 пунктов.
Вот один из примеров:
Заказчик обратился к нам с интернет-магазином автозапчастей с большим каталогом. Сайт открывался очень медленно. Посмотрели производительность по страницам.
Главная открывалась быстро, переход по разделам тоже. А при открытии карточек товаров сайт начинал тормозить. Так, страница с товаром загружалась 25-30 секунд. Посмотрели на сервере – особенной нагрузки при этом не было.
Стали выяснять у заказчика, что он делал на сайте до появления проблемы. Заказчик вспомнил, что включал модуль нанесения водяных знаков на изображения. Сначала модуль работал нормально, но потом стал переполняться диск, и заказчик этот модуль отключил. Видимо, модуль не отключился полностью и начал вызывать огромную задержку при просмотре товаров.
В итоге клиент заново установил и удалил этот модуль, после чего проблема исчезла.
При переносе сайтов на наш хостинг мы проверяем все настройки конфигурации и выставляем их правильно, так как сайты переносятся на подготовленное окружение.
Дополнительно инженеры выставляют параметры, основываясь на специфике каждого отдельного сайта, чтобы обеспечить его максимальную производительность.
Для проектов с высокой нагрузкой иногда приходится придумывать отдельные решения.
Недавно у медиа-компании, которая прогнозировала большой наплыв посетителей, появилась задача увеличить параметры сервера, чтобы гарантированно справиться с нагрузкой.
Мы посчитали, что даже максимальных показателей одного сервера будет недостаточно. Компания обратилась к нам с вопросом, что можно сделать в этой ситуации.
Конечно, есть коробочное решение – пакет Битрикс Enterprise, который позволяет размещать сайты на нескольких серверах, чтобы справляться с высокой нагрузкой. Но это решение очень дорогостоящее, стоимостью в сотни тысяч рублей. Заказчик пока не рассматривал такие инвестиции.
Поэтому мы предложили создать простую версию масштабируемого кластера без необходимости покупать дорогую лицензию.
Контент сайта мы разместили на двух серверах так называемых “php бэкендах”, и добавили отдельный сервер в качестве балансировщика. Он распределял нагрузку между двумя серверами в зависимости от количества запросов к сайту. База данных была вынесена на отдельный сервер.
Тестирование показало, что максимальное количество запросов (RPS) которые способен обработать кластер, выросло как минимум в три раза по сравнению с одиночным сервером. При этом появилась возможность дальнейшего масштабирования кластера за счёт добавления дополнительных бэкендов.
При очередном скачке посетителей такое кластерное решение справилось с возросшей нагрузкой, и задача была решена.
Таким образом, клиент получил кластерное решение без необходимости платить сотни тысяч рублей за покупку дорогой лицензии. Задача была решена на порядок меньшим бюджетом.
Увеличение скорости работы сайта имеет двойной эффект.
Во-первых, быстрые сайты, которые “летают”, имеют для посетителей “вау-эффект”. По сравнению с ними сайты конкурентов кажутся ещё более медленными и задержки при работе с ними начинают раздражать. А выделяющийся на их фоне быстрый сайт не только подтверждает, что компания вложилась в технологии и подумала об удобстве пользователей, но и создаёт “эффект притяжения” - на таком сайте хочется дольше находится, чаще возвращаться и совершать больше транзакций.
И во-вторых, как отмечают многие из наших клиентов, ускорение загрузки страниц сайта повышает его позиции в поисковой выдаче Google и Яндекс. А это уже прямая коммерческая выгода.
Мы постарались в этой статье написать о тех приёмах увеличения скорости загрузки, которые можно как использовать самостоятельно, так и обратиться за консультацией к нашим специалистам. Будем рады помочь ускорить и ваш интернет-проект.
Если у вас есть что добавить к этим способам или вы захотите поделиться своими – напишите в комментариях. Будет полезно всем, кто работает в этом направлении.
Статья добавлена 2 года назад. Автор - Eltigro