Ускоряем сайт в 100 раз

Скорость работы сайта – одна из важнейших его характеристик. Время, за которое загружается и отображается открываемая пользователем страница, важно как для посетителей веб-ресурса, которые могут просто уйти, не дождавшись информации, так и для поисковых систем (Яндекс, Google и пр.), поскольку чем короче период отклика интернет-сайта, тем выше он в них ранжируется. Уникальная технология, разработанная компанией «1С-Битрикс», позволяет сократить время загрузки веб-сайта в десятки и даже в сотни раз! Более того, она успешно соединяет высокую скорость загрузки, присущую простым статическим ресурсам, со всеми возможностями динамических. Тем самым предоставляя комфорт посетителям веб-ресурса и обеспечивая скорость его индексации поисковиками. Название этой технологии – композитный сайт. Композитная технология основана на отдаче сервером веб-страниц в два этапа, разделяя каждую из них на две части:

  • статичную – которая сохраняется в кэше и остается в неизменном виде
  • динамичную – которая подвергалась изменениям со времени последнего кэширования.

Пользователю практически моментально открывается кэшированный статичный контент, затем плавно, в фоновом режиме подгружается контент динамичный. Благодаря чему основная часть информационного содержимого веб-страницы предоставляется пользователю (и поисковикам) уже спустя какие-то десятые доли секунды. Еще одним весомым преимуществом данной технологии является то, что работать на ней может абсолютно любой интернет-ресурс, реализованный на платформе «1С-Битрикс». Что дает нам возможность не только создавать новые композитные сайты, но переводить на композит уже работающие проекты.

Сколько все стоит?

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

Лицензия Старт4 900 руб.
Лицензия Стандарт13 900 руб.
Лицензия Малый бизнес27 900 руб.
Лицензия Эксперт40 900 руб.
Лицензия Бизнес56 900 руб.
Лицензия Веб-кластер129 900 руб.

Надумали купить лицензию или хотите узнать больше?

Для наших клиентов и читателей блога у нас действует специальное предложение на покупку лицензии 1C-Bitrix. Для того, что бы подробнее узнать о редакциях продукта, а так же заказать лицензию и получить гарантированный подарок перейдите на страницу акции.

Как перевести сайт на композит (с примерами)

Допустим у вас уже есть сайт на платформе 1C-Bitrix версии 14.5 и старше. Для перевода его в композитный режим потребуется выполнить несколько простых шагов: 1) Переходим на страницу /bitrix/admin/composite.php и включаем композитный режим. Немного комментариев к настройкам:

  • Хранить кеш в - выбирайте в зависимости от сервера (есть куча оперативки - memcached, иначе в файлах)
  • Список доменных имен - список всех доменных имен по которым доступен сайт
  • Маска включения - маска для файлов, которые будут кэшироваться. Чаще всего достаточно оставить стандартные (*.php;*/)
  • Маска исключения - эти файлы не будут отображаться в композитном режиме. Как стоит запретить композит для ядра, 404 и поиска (/bitrix/*;/404.php;*search/)
  • Сохранять на диск только страницы без параметров - отключить кэширование для страниц с GET параметрами
  • а также страницы содержащие только следующие параметры - включить для страниц с заданными GET параметрами. В 95% случаев рекомендую оставить стандартные значения, но если вы не используете ЧПУ для некоторых страниц, занесите параметры в этот список.
  • Дисковая квота (мегабайт) - если не используется memcached, то кэш хранится в файлах. При превышении указанной квоты будут затираться самые ранние данные кэша и записываться новые. Мой совет -не жалейте места
  • Группы - настройка групп пользователей, для которых будет показана страница в композитном режиме. Не добавляйте туда группы имеющие доступ к редактированию материалов на сайте!
  • Кнопка - настройка визуального отображения кнопки на сайте. (по ней удобнее всего отслеживать включился ли композит на сайте)

2) Переходим в файл bitrix/php_interface/dbconn.php и добавляем следующие строчки.

define("BX_COMPOSITE_DEBUG", true); //Включаем дебаг
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt"); //Включаем логирование

3) Заходим в другом браузере под пользователем входящим в группу для отображения композитного режима. 4) Переходим на страницу сайта на которой хотим настроить композитный режим, пару раз обновляем ее и идем анализировать логи. (/log.txt) 5) В файле лога вы увидите записи подобного вида (Для начала ищем строки вида Composite was rejected):

Host: yourhost.ru
Date: 2014-08-15 11:27:26
Module: Composite was rejected
Reason: /bitrix/templates/tName/components/bitrix/search.form/topSearch/template.php
Request URI: /
Script: /index.php
 Bitrix\Main\Data\StaticHtmlCache::applyComponentFrameMode < CBitrixComponentTemplate::__IncludePHPTemplate < CBitrixComponentTemplate::IncludeTemplate < CBitrixComponent::showComponentTemplate < CBitrixComponent::includeComponentTemplate
 ~/bitrix/modules/main/classes/general/component_template.php:516
 ~/bitrix/modules/main/classes/general/component_template.php:582
 ~/bitrix/modules/main/classes/general/component.php:603
 ~/bitrix/modules/main/classes/general/component.php:552
 ~/bitrix/components/bitrix/search.form/component.php:28
----------

Переходим в код компонента, который вызывает конфликт и пытаемся привести его к композитному режиму. В нашем случае - это форма поиска, расположенная оп адресу /bitrix/templates/tName/components/bitrix/search.form/topSearch/template.php смотрим код, анализируем.

 ">  IncludeComponent(  "bitrix:search.suggest.input",  "",  array(  "NAME" => "q",  "VALUE" => "",  "INPUT_SIZE" => 15,  "DROPDOWN_SIZE" => 10,  ),  $component, array("HIDE_ICONS" => "Y")  );?>  

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

$this->setFrameMode(true); //голосуем за композит

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

Что такое голосование?

Голосование это процесс опроса компонентов о готовности работы в композитном режиме. Для включения композита на странице необходимо что бы все подключенные компоненты проголосовали "ЗА". Что мешает везде воткнуть$this->setFrameMode(true);?

Рассмотрим на примере компонента корзины товаров:

 
 0) {
 ?>
 ">
 ">
 (0)
 ">
 (0)

Что же произойдет, если закэшировать страницу как есть? Первый раз закэшируется страница на которой в корзине нет товаров и при добавлении товара в корзину он не отобразится пока вы не обновите страницу как минимум 2 раза (1хит на переписку кэша, второй на отображение). А если на сайте одновременно 2 или больше пользователей? Тогда пользователь, который зайдет на сайт увидит чужую корзину и так далее. Это и  называется динамичной информацией. каким же образом можно поправить ситуацию? Специально для этого в битриксе есть способ разделить информацию на динамическую и статическую:

$frame = $this->createFrame()->begin();//Начало динамической области
$frame->beginStub(); //Начало статичной области
$frame->end(); // Конец фрейма

Применим к нашему шаблону:

 
createFrame("sale-basket-basket-line-container", false)->begin();
if (intval($arResult["NUM_PRODUCTS"]) > 0) {
 ?>
 ">
 ">
 (0)beginStub();?>
 ">
 (0)
 end(); ?> 

Рассмотрим подробнее эту строчку:

$frame = $this->createFrame("sale-basket-basket-line-container", false)->begin();

В createFrame передается два параметра - класс объекта DOM, который служит оберткой композитному фрейму, а так же указатель (false) на то, что не требуется дополнительная обертка. Если не указать эти параметры, код от createFrame до end будет обернут в дополнительный div. Так же есть два способа сделать заглушку для динамической области, с помощью beginStub или передав в begin строку, например $frame = $this->createFrame("sale-basket-basket-line-container", false)->begin('загрузка');  , в этом случае до загрузки данных будет отображаться слово "загрузка". Более подробную информацию о настройке композитного сайта вы можете узнать из официального курса.

Понравилось? Репост!

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

Саша
Здравствуйте. Спасибо за полезную статью. Возник вопрос а самом начале… Почему может не создаваться файл логов? Сделал всё, как Вы описывали. Полагаю, что проблема в группах пользователей. Но у нас на сайте только один пользователь. Помогите, если не затруднит, разобраться, что нужно указать в настройках композитного сайта в группах, чтобы все не авторизованные пользователи его видели. Или в чём ещё может быть причина?