26
Композитный сайт Юрий Тушинский «Битрикс», технический директор

Композитный сайт

  • Upload
    ginger

  • View
    88

  • Download
    7

Embed Size (px)

DESCRIPTION

Композитный сайт. Юрий Тушинский « Битрикс », технический директор. Основная идея. Максимально быстро отдать пользователю страницу из кеша Д ополнительным ajax - запросом проверить валидность кеша и получить данные динамических областей. До. После. Ajax- запрос. Динамический контент. - PowerPoint PPT Presentation

Citation preview

Page 1: Композитный сайт

Композитный сайт

Юрий Тушинский«Битрикс», технический директор

Page 2: Композитный сайт

Основная идея

• Максимально быстро отдать пользователю страницу из кеша• Дополнительным ajax-запросом проверить валидность кеша и получить

данные динамических областей.

До

После

Ajax-запрос

Page 3: Композитный сайт

Динамический контент

• Сайт логически делится на статические и динамические области.

• Статическая область сохраняется на диск и отдается сразу и целиком.

• Динамические области:• отличаются для разных

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

минуты)• не могут быть вложенными

• Контент динамических областей возвращается в ajax-запросе.

• Список новостей – это не динамическая часть!

Page 4: Композитный сайт

Как работает

Page 5: Композитный сайт

Включение и настройки

• Хранение кеша• Файлы (папка /bitrix/html_pages/)• Memcached

• Отдача кеша• PHP (по умолчанию)• Nginx (требуется дополнительная настройка)

Page 6: Композитный сайт

Включение и настройки

Page 7: Композитный сайт

Условие включения режима

• Только GET-запросы• Это не HTTPS• Это не IE6-9 (main 14.5.2)• Запрос не начинается с /bitrix• Это не ajax-запрос, сделанный с помощью BX.ajax• Нет cookie _NCC• Запрос не входит ни в одну из масок исключения• Запрос входит хотя бы в одну маску включения• Проверка параметров в query_string согласно

настройкам

Page 8: Композитный сайт

Голосование «за» и «против»

• Компоненты и шаблоны, подключенные на странице, голосуют за композитный режим

• По умолчанию компоненты голосуют «за», а шаблоны – «против»

• Если хоть один из них проголосовал против, то для страницы режим включен не будет

• В этом случае в журнал отладки AddMessage2Log делается запись (если включена константа BX_COMPOSITE_DEBUG)

Page 9: Композитный сайт

Отладка

• dbconn.php: define("BX_COMPOSITE_DEBUG", true);define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt");

• В папке кеша /bitrix/html_pages/<domain>/ файлы перед перезаписью копируются в *.delete.<microtime>

• Вызывается функция AddMessage2Log• когда компонент или шаблон голосуют против• когда создается файл *.delete• когда превышена дисковая квота

Page 10: Композитный сайт

Отладка

Page 11: Композитный сайт

Шаблон до интеграции

Page 12: Композитный сайт

Шаблон голосует «за»

Page 13: Композитный сайт

Выделение динамической области

Page 14: Композитный сайт

Выделение динамической области

• ->begin('') – пустая строка означает пустую заглушку

• ->begin('Загрузка…')

• ->begin() – контент динамической области является заглушкой (запишется в кеш).

Page 15: Композитный сайт

Свой контейнер и инициализация JS

Page 16: Композитный сайт

Динамический контент вне компонента

• Динамическая область может находится и вне контекста компонентов (шаблон сайта, php-страницы)

$frame = new \Bitrix\Main\Page\FrameHelper("my_dynamic_area");$frame->begin(); //динамический контент$frame->beginStub(); //заглушка$frame->end();

\Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("area"); // некоторый динамический контент вне компонента\Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("area", ”stub");

Способ с буферизацией. Удобнее, но нельзя использовать отложенные функции.

Page 17: Композитный сайт

Алгоритм интеграции

• Проверить отсутствие в логах голосов «против»• Обновить страницу и проверить отсутствие лога с

информацией об удалении файла из кеша

• Если такие файлы есть, то сравнить их и устранить причину различий

Page 18: Композитный сайт

Что приводит к перезаписи кеша

• Случайные строки (ID сессии, id для JS-объектов и др.)• Метод компонента randString() обеспечивает стабильную

генерацию псевдо-случайных величин• Сколько раз его ни вызывай в шаблоне – это не повлияет на

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

• Если на странице подставляется REQUEST_URI (в form[action], back_url и. т. п.), т.к. site.ru/folder/ и site.ru/folder/index.php – это один файл кеша.

• Если контент меняется на каждом хите (баннеры, текущее время)

Page 19: Композитный сайт

Работа с локальной БД браузера

Page 20: Композитный сайт

Осторожно используем BX.message

• В закешированной странице нет следующих JS-данных:• BX.message("USER_ID")• BX.message("bitrix_sessid") или BX.bitrix_sessid()• BX.message("SERVER_TIME")• BX.message("SERVER_TZ_OFFSET")• BX.message("USER_TZ_OFFSET")• BX.message(”USER_TZ_AUTO")

• Приходят с ajax-запросом и кешируются в localStorage• Если происходит обращение к этим данным и их нет в

localStorage, происходит блокирующий ajax-запрос

Page 21: Композитный сайт

304-ответ

• Для статического кеша отдается HTTP-заголовок

Last-Modified

• Браузер делает Conditional Get-запрос с заголовком If-Modified-Since

• Для связки NGINX+Memcached заголовок будет 200

Page 22: Композитный сайт

Считаем миллисекунды

• Композитный режим влияет только на время ожидания ответа от сервера (Server Response Time)

• Не влияет на время:• DNS lookup, • TCP соединения• Загрузки JS, CSS и картинок

• Учет композитных страниц в Google Analytics

• Google Analytics и Яндекс.Метрика собирают данные клиентской загрузки на основе Navigation Timing

Page 23: Композитный сайт

Где лежит кеш и как его удалять

• Настройки продукта -> Автокеширование Вкладка Очистка файлов кеша

• php -f /path/to/site/bitrix/modules/main/tools/cron_html_pages.php 10Удалит все файлы, которые были созданы раньше, чем 10 часов назад

• Если изменился шаблон сайта, имеет смысл удалить весь кеш.

Page 24: Композитный сайт

Планы развития

• Удобный инструмент для отладки• Уход от констант и текстовых логов• Логирование причин, из-за которых не

сработал композитный режим• Визуальное сравнение версий

страниц

• Упрощение настройки nginx• Автоконфигуратор правил на основе

настроек в админке

• Персонализированный кеш

Page 25: Композитный сайт

Где почитать?

• Учебный курс: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=39• Документация на сайте: http://dev.1c-bitrix.ru/user_help/settings/settings/composite.php• Посты в блоге Антона Герасимюка:

http://dev.1c-bitrix.ru/community/blogs/cookbook/composite-website-tips-tricks.php

http://dev.1c-bitrix.ru/community/blogs/cookbook/composite-news.php

Page 26: Композитный сайт

Спасибо за внимание! Вопросы?