Композитный сайт
DESCRIPTION
Композитный сайт. Юрий Тушинский « Битрикс », технический директор. Основная идея. Максимально быстро отдать пользователю страницу из кеша Д ополнительным ajax - запросом проверить валидность кеша и получить данные динамических областей. До. После. Ajax- запрос. Динамический контент. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/1.jpg)
Композитный сайт
Юрий Тушинский«Битрикс», технический директор
![Page 2: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/2.jpg)
Основная идея
• Максимально быстро отдать пользователю страницу из кеша• Дополнительным ajax-запросом проверить валидность кеша и получить
данные динамических областей.
До
После
Ajax-запрос
![Page 3: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/3.jpg)
Динамический контент
• Сайт логически делится на статические и динамические области.
• Статическая область сохраняется на диск и отдается сразу и целиком.
• Динамические области:• отличаются для разных
пользователей• часто меняются (секунды или
минуты)• не могут быть вложенными
• Контент динамических областей возвращается в ajax-запросе.
• Список новостей – это не динамическая часть!
![Page 4: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/4.jpg)
Как работает
![Page 5: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/5.jpg)
Включение и настройки
• Хранение кеша• Файлы (папка /bitrix/html_pages/)• Memcached
• Отдача кеша• PHP (по умолчанию)• Nginx (требуется дополнительная настройка)
![Page 6: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/6.jpg)
Включение и настройки
![Page 7: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/7.jpg)
Условие включения режима
• Только GET-запросы• Это не HTTPS• Это не IE6-9 (main 14.5.2)• Запрос не начинается с /bitrix• Это не ajax-запрос, сделанный с помощью BX.ajax• Нет cookie _NCC• Запрос не входит ни в одну из масок исключения• Запрос входит хотя бы в одну маску включения• Проверка параметров в query_string согласно
настройкам
![Page 8: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/8.jpg)
Голосование «за» и «против»
• Компоненты и шаблоны, подключенные на странице, голосуют за композитный режим
• По умолчанию компоненты голосуют «за», а шаблоны – «против»
• Если хоть один из них проголосовал против, то для страницы режим включен не будет
• В этом случае в журнал отладки AddMessage2Log делается запись (если включена константа BX_COMPOSITE_DEBUG)
![Page 9: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/9.jpg)
Отладка
• 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: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/10.jpg)
Отладка
![Page 11: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/11.jpg)
Шаблон до интеграции
![Page 12: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/12.jpg)
Шаблон голосует «за»
![Page 13: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/13.jpg)
Выделение динамической области
![Page 14: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/14.jpg)
Выделение динамической области
• ->begin('') – пустая строка означает пустую заглушку
• ->begin('Загрузка…')
• ->begin() – контент динамической области является заглушкой (запишется в кеш).
![Page 15: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/15.jpg)
Свой контейнер и инициализация JS
![Page 16: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/16.jpg)
Динамический контент вне компонента
• Динамическая область может находится и вне контекста компонентов (шаблон сайта, 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: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/17.jpg)
Алгоритм интеграции
• Проверить отсутствие в логах голосов «против»• Обновить страницу и проверить отсутствие лога с
информацией об удалении файла из кеша
• Если такие файлы есть, то сравнить их и устранить причину различий
![Page 18: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/18.jpg)
Что приводит к перезаписи кеша
• Случайные строки (ID сессии, id для JS-объектов и др.)• Метод компонента randString() обеспечивает стабильную
генерацию псевдо-случайных величин• Сколько раз его ни вызывай в шаблоне – это не повлияет на
другие компоненты/шаблоны• Для разных пользователей выводится разный контент
• Если на странице подставляется REQUEST_URI (в form[action], back_url и. т. п.), т.к. site.ru/folder/ и site.ru/folder/index.php – это один файл кеша.
• Если контент меняется на каждом хите (баннеры, текущее время)
![Page 19: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/19.jpg)
Работа с локальной БД браузера
![Page 20: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/20.jpg)
Осторожно используем 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: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/21.jpg)
304-ответ
• Для статического кеша отдается HTTP-заголовок
Last-Modified
• Браузер делает Conditional Get-запрос с заголовком If-Modified-Since
• Для связки NGINX+Memcached заголовок будет 200
![Page 22: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/22.jpg)
Считаем миллисекунды
• Композитный режим влияет только на время ожидания ответа от сервера (Server Response Time)
• Не влияет на время:• DNS lookup, • TCP соединения• Загрузки JS, CSS и картинок
• Учет композитных страниц в Google Analytics
• Google Analytics и Яндекс.Метрика собирают данные клиентской загрузки на основе Navigation Timing
![Page 23: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/23.jpg)
Где лежит кеш и как его удалять
• Настройки продукта -> Автокеширование Вкладка Очистка файлов кеша
• php -f /path/to/site/bitrix/modules/main/tools/cron_html_pages.php 10Удалит все файлы, которые были созданы раньше, чем 10 часов назад
• Если изменился шаблон сайта, имеет смысл удалить весь кеш.
![Page 24: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/24.jpg)
Планы развития
• Удобный инструмент для отладки• Уход от констант и текстовых логов• Логирование причин, из-за которых не
сработал композитный режим• Визуальное сравнение версий
страниц
• Упрощение настройки nginx• Автоконфигуратор правил на основе
настроек в админке
• Персонализированный кеш
![Page 25: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/25.jpg)
Где почитать?
• Учебный курс: 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: Композитный сайт](https://reader031.vdocuments.mx/reader031/viewer/2022020712/5681408e550346895dac1b2a/html5/thumbnails/26.jpg)
Спасибо за внимание! Вопросы?