В данной записи я буду публиковать все свои наработки по оптимизации сайта на Bitrix. В записи будут собранны все работы которые я проводил для улучшения скорости загрузки страниц, уменьшения нагрузки сайта на сервер.
Кэширование запросов к БД
Первый пункт, который указывается почти во всех статьях и является главным требованием в разработке — это кэширование запросов к базе данных. Если вы используете запросы в файле result_modifier.php, то в нем вам НЕ нужно кэшировать запросы, вам достаточно передать полученные данные в массив $arResult. Данный массив, при включенной опции кэширования, записывается в кэш автоматически.
Речь идёт о запросах которые производятся в шаблоне сайта или на странице. В таком случае я использую готовую функцию, которую я прописал в init.php, чтобы к ней можно было ссылаться на всем сайте.
$timeSeconds — время жизни кэша
$cacheId — уникальный ключ
$callback — функция которая должна выполняться (в данной функции может быть запрос к БД)
$arCallbackParams — параметры функции
function returnResultCache($timeSeconds, $cacheId, $callback, $arCallbackParams = '') {
$obCache = new CPHPCache();
$cachePath = '/'.SITE_ID.'/'.$cacheId;
if( $obCache->InitCache($timeSeconds, $cacheId, $cachePath) ) {
$vars = $obCache->GetVars();
$result = $vars['result'];
// $result["status"] = "это кэш";
}
elseif( $obCache->StartDataCache() ) {
$result = $callback($arCallbackParams);
$obCache->EndDataCache(array('result' => $result));
}
return $result;
}
Включение композитного сайта
В крации, компонентный сайт — это создание готовых закэшированных страниц, которые при первом запросе создаются, а в дальнейшем передаются каждому новому пользователю. То есть страница не создаётся при каждой загрузке, а просто передаётся готовая версия.
Включение композитного сайта увеличивает скорость загрузки сайта в десятки раз. Вы сразу заметите разницу. Для включения композитного сайта, вам нужно выбрать соответствующий пункт в настройках сайта. После включения композита у меня были небольшие ошибки с меню, они исправились когда я прописал в шаблоне компонента меню строку разрешающую использования компонентного сайта для данного шаблона.
$this->setFrameMode(true);
Настройка прав доступа для пользователей
Моей ошибкой было неправильное создания учётных записей для сотрудников. Я для контент-менеджеров открыл модуль «интернет-магазин». Это действие увеличивает нагрузку на сервер, так как для пользователей подключаются дополнительные данные в меню, которыми они не пользуются. Если это пару человек, то это не сильно заметно, но если у вас более 10 сотрудников, то нужно это учитывать и открывать пользователям, только те доступы, которыми они точно будут пользоваться + это обезопасит ваш проект.
Избавление от catalog.item
При разработке второго проекта на своей работе, я решил избавиться от компонента catalog.item. Я считаю что это бесполезный компонент, потому что он делает лишние запросы к БД, которые можно было бы избежать используя полный код листинга в catalog.section. Если на вашем сайте нет функционала акций от системы bitrix, нет большого количества видов цен, то лучше не использовать данный компонент.