'

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

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

Основная идея Максимально быстро отдать пользователю страницу из кеша Дополнительным ajax-запросом проверить валидность кеша и получить данные динамических областей. До После Ajax-запрос


Слайд 2

Динамический контент Сайт логически делится на статические и динамические области. Статическая область сохраняется на диск и отдается сразу и целиком. Динамические области: отличаются для разных пользователей часто меняются (секунды или минуты) не могут быть вложенными Контент динамических областей возвращается в ajax-запросе. Список новостей – это не динамическая часть!


Слайд 3

Как работает


Слайд 4

Включение и настройки Хранение кеша Файлы (папка /bitrix/html_pages/) Memcached Отдача кеша PHP (по умолчанию) Nginx (требуется дополнительная настройка)


Слайд 5

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


Слайд 6

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


Слайд 7

Голосование «за» и «против» Компоненты и шаблоны, подключенные на странице, голосуют за композитный режим По умолчанию компоненты голосуют «за», а шаблоны – «против» Если хоть один из них проголосовал против, то для страницы режим включен не будет В этом случае в журнал отладки AddMessage2Log делается запись (если включена константа BX_COMPOSITE_DEBUG)


Слайд 8

Отладка dbconn.php: define("BX_COMPOSITE_DEBUG", true); define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt"); В папке кеша /bitrix/html_pages/<domain>/ файлы перед перезаписью копируются в *.delete.<microtime> Вызывается функция AddMessage2Log когда компонент или шаблон голосуют против когда создается файл *.delete когда превышена дисковая квота


Слайд 9

Отладка


Слайд 10

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


Слайд 11

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


Слайд 12

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


Слайд 13

Выделение динамической области ->begin('') – пустая строка означает пустую заглушку ->begin('Загрузка…') ->begin() – контент динамической области является заглушкой (запишется в кеш).


Слайд 14

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


Слайд 15

Динамический контент вне компонента Динамическая область может находится и вне контекста компонентов (шаблон сайта, 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"); Способ с буферизацией. Удобнее, но нельзя использовать отложенные функции.


Слайд 16

Алгоритм интеграции Проверить отсутствие в логах голосов «против» Обновить страницу и проверить отсутствие лога с информацией об удалении файла из кеша Если такие файлы есть, то сравнить их и устранить причину различий


Слайд 17

Что приводит к перезаписи кеша Случайные строки (ID сессии, id для JS-объектов и др.) Метод компонента randString() обеспечивает стабильную генерацию псевдо-случайных величин Сколько раз его ни вызывай в шаблоне – это не повлияет на другие компоненты/шаблоны Для разных пользователей выводится разный контент Если на странице подставляется REQUEST_URI (в form[action], back_url и. т. п.), т.к. site.ru/folder/ и site.ru/folder/index.php – это один файл кеша. Если контент меняется на каждом хите (баннеры, текущее время)


Слайд 18

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


Слайд 19

Осторожно используем 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-запрос


Слайд 20

304-ответ Для статического кеша отдается HTTP-заголовок Last-Modified Браузер делает Conditional Get-запрос с заголовком If-Modified-Since Для связки NGINX+Memcached заголовок будет 200


Слайд 21

Считаем миллисекунды Композитный режим влияет только на время ожидания ответа от сервера (Server Response Time) Не влияет на время: DNS lookup, TCP соединения Загрузки JS, CSS и картинок Учет композитных страниц в Google Analytics Google Analytics и Яндекс.Метрика собирают данные клиентской загрузки на основе Navigation Timing


Слайд 22

Где лежит кеш и как его удалять Настройки продукта -> Автокеширование Вкладка Очистка файлов кеша php -f /path/to/site/bitrix/modules/main/tools/cron_html_pages.php 10 Удалит все файлы, которые были созданы раньше, чем 10 часов назад Если изменился шаблон сайта, имеет смысл удалить весь кеш.


Слайд 23

Планы развития Удобный инструмент для отладки Уход от констант и текстовых логов Логирование причин, из-за которых не сработал композитный режим Визуальное сравнение версий страниц Упрощение настройки nginx Автоконфигуратор правил на основе настроек в админке Персонализированный кеш


Слайд 24

Где почитать? Учебный курс: 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


Слайд 25

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


×

HTML:





Ссылка: