1 / 26

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

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

ginger
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. Как работает

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

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

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

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

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

  10. Отладка

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

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

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

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

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

  16. Динамический контентвне компонента • Динамическая область может находится и вне контекста компонентов (шаблон сайта, php-страницы) \Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("area");// некоторый динамический контент вне компонента\Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("area", ”stub"); Способ с буферизацией. Удобнее, но нельзя использовать отложенные функции. $frame = new\Bitrix\Main\Page\FrameHelper("my_dynamic_area"); $frame->begin(); //динамический контент $frame->beginStub(); //заглушка $frame->end();

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

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

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

  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-запрос

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

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

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

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

  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

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

More Related