HTML кэширование

HTML кэширование

Существует категория проектов, которые подвержены редким изменениям.
Чаще всего это проекты созданные на редакции Старт и реже Стандарт и Малый бизнес.
Или это могут быть целые разделы сайта на других редакциях.

Однажды созданные разделы или материалы на таких сайтах могут не обновляться месяцами.
Много таких проектов создают оптимизаторы.

И хоть в режиме Автокэширования наш продукт не выполняет ни одного запроса к базе данных и отдает страницы максимально быстро, все же виртуальный хостинг замедляет выдачу страниц просто из за самого факта подключения PHP и из-за высокой загруженности дисковых подсистем.

И всегда хочется минимизировать расходы для хостинга для самых простых и легких проектов.

В рамках работ над Контроллером сайтов нами разработан новый тип кеширования, который получил название "HTML кеш".


Эта технология вошла во все редакции продукта начиная с версии 6.5.8 главного модуля.
http://www.1c-bitrix.ru/sitemanager/v...odule=main
Располагается на вкладке "Настройки"-"Настройки продукта"-"Автокеширование"-"HTML кеш"



На решениях с Контроллером мы используем эту технологию и отдаем эти страницы через NGINX за счет чего обеспечивается огромный ресурсный рост для редко изменяющихся сайтов или страниц. Например наш тестовый сайт обрабатывает 70 запросов в секунду, а с HTML кещ через NGINX уже 1200-1600 страниц в секунду.

В целом, я считаю, что HTML кеширование станет технологией повседневного использования для очень многих небольших проектов. А в сочетании с Контроллером сайтов вообще станет в руках наших партнеров ядерным оружием smile:)

Технология проста в эксплуатации, не требует от пользователя отслеживать изменения, защищает дисковой квотой от накрутки данных и само-восстанавливает работоспособность при превышении квоты или изменении данных.

Как только пользователь авторизуется в продукте, он уже работает с сайтом без кеширования, как с обычным продуктом.

Технология HTML кеширования работает в нашем автоматическом режиме AJAX с компонентами 2.0.
Так что это тоже будет удобно использовать на проектах.

Есть и ограничения в использовании. В частности, мы не советуем включать HTML кеш (или включать обдуманно по разделам) для редакций, которые содержат веб-аналитику и модуль рекламы.

Приведу фрагмент описания технологии:

Механизм HTML-кеширования лучше всего включить на какой-нибудь редко изменяющийся раздел с регулярным посещением анонимных посетителей, так как при включенном HTML-кешировании происходят следующие процессы:

* механизмом HTML-кеша обрабатываются только страницы, не указанные в маске исключения и указанные в маске включения;
* если на такие страницы заходит не авторизованный пользователь, то выполняется проверка существования файла кеша и если таковой найден, то выдается страница из кеша, не задействуя никакие модули продукта; например, не будет работать модуль статистики (не засчитаются хиты этого пользователя), модуль рекламы, главный и другие модули;
* при этом, если на момент включения кеша был установлен модуль компрессии, то страница будет отдаваться в сжатом виде;
* если страница в кеше не найдена, то код исполняется в обычном режиме; когда страница полностью сформирована, ее копия сохраняется в HTML-кеш;

Oчистка кеша:

* если сохраняемый объем приводит к превышению дисковой квоты кеша, то кеш полностью очищается;
* так же полная очистка кеша происходит при любом изменении данных в административной части системы;
* если в публичной части сайта происходит POST данных (например, добавление комментария или голосование), то сбрасывается соответствующая часть кеша;

Необходимо отметить, что для неавторизованных пользователей происходит удаление сессии (например, если неавторизованный пользователь перейдет в закешированную часть сайта, то все данные его сессии будут удалены).

Из всего выше сказанного следует, что:

* не ведется учет статистики;
* модуль рекламы будет работать только в момент создания кеша (это не относится к внешней динамической рекламе (Begun и пр.);
* например, для неавторизованных пользователей результаты сравнения товаров не будут сохранены (так как его данные хранятся в сессии, которой "нет");
* необходимо обязательно задать дисковую квоту в настройках модуля HTML кещ во избежание DOS-атаки по дисковому пространству;
* после включения механизма HTML-кеширования необходимо проверить весь функционал раздела, к которому применен кеш (например, может не сработать публикация комментариев со старыми шаблонами блогов);

Обновления главного модуля 6.5.8 вышло в систему обновлений сегодня.

Ганущак Андрей
19.02.2008 02:54:47
Идея отличная, но при попытке потестировать - сразу вылез такой баг:
редакция Старт, 2 простых сайта с разными доменами на одной лицензии, после включения HTML-кеширования получаем на втором сайте некоторую "солянку" из кэша страниц первого сайта.
Сергей Рыжиков
19.02.2008 08:42:16
Спасибо, Андрей, сегодня проверим. Отключите пока HTML кеш.
Максим Смирнов
19.02.2008 11:16:25
Андрей, проверьте, что у вас настроена серверная переменная BX_PERSONAL_ROOT.
Код
<VirtualHost *>
        DocumentRoot "/var/www/site1/"
        ServerName www.site1.ru
        SetEnv BX_PERSONAL_ROOT "/bitrix_personal"
</VirtualHost>

Для каждого сайта надо создать каталог /bitrix_personal в корне.
Для "не общих" данных (в том числе и кеша).
Максим Смирнов
19.02.2008 11:26:53
Только не надо спешить!
Все не так просто...
Эта настройка позволяет "разнести" по сайтам бывшие ранее общими такие вещи как:
Код
root@slamp:~# ls -l /var/www2/sites/s5/bitrix_personal/
итого 12
drwxrwxr-x 4 www-data www-data 2048 2007-12-12 15:44 cache
drwxrwxr-x 3 www-data www-data 2048 2007-12-12 10:46 managed_cache
drwxrwxr-x 3 www-data www-data 2048 2007-12-13 13:02 html_pages
drwxrwxr-x 2 www-data www-data 2048 2007-12-12 10:45 php_interface
drwxrwxr-x 3 www-data www-data 2048 2007-12-12 12:32 stack_cache
drwxrwxr-x 5 www-data www-data 2048 2007-12-12 10:51 templates
Максим Смирнов
19.02.2008 11:57:04
По какому варианту настроена многосайтовость?
Первому или второму?
Ганущак Андрей
19.02.2008 14:15:07
Многосайтовость настроена по второму способу.

Предупреждение "Только не надо спешить!" не остановило smile;) , а показ структуры каталога bitrix_personal/ помог все корректно настроить.
Рамиль Юналиев
19.02.2008 12:46:13
Ну что сказать... конечно вам +1 , как раз щас работаю над таким проектом... обязательно воспользуюсь smile:)
Деонис Перетягин
19.02.2008 14:22:31
Я, конечно, понимаю, что текущий SITE_ID вычисляется позже, нежли чем включается html кэш.
Однако все же надо было придумать что-нибудь, что бы позволяло на одном из сайтов html кэш включить, а на другом выключить.
Андреев Юрий
20.02.2008 11:36:02
+10 баллов. smile:) хорошая весть.
побежал обновлять клиентов. smile:)
Андреев Юрий
20.02.2008 11:40:05
Новые обновления ядра продукта не доступны.
Проект работает на основе "1С-Битрикс: Управление сайтом 6.5.6".
обидно и непонятно.
Гриппа Василий
20.02.2008 15:05:26
Просто 6.5.8 выпущена пока в бета-режиме.
Нужно чуть-чуть потерпеть... smile:)
Андреев Юрий
20.02.2008 15:22:48
ну я понял... просто нет проектов с бета-тестированием обновлений, но письмецо пришло, что вышло новое обновление... вот и понадеялся что оно уже наступило...

терпим... ждем... smile:)
Романчев Валерий
23.02.2008 17:52:35
вопрос про URL этого поста
http://www.1c-bitrix.ru/blog/rsv/268.php
неужто в папке rsv лежит больше 200 php-файлов?
или это все-так мод рерайт так странно настроен?

спросил бы в форуме, то там мне почему-то не дает создавать темы
Dmitry Valyanov
26.02.2008 20:37:15
Цитата
неужто в папке rsv лежит больше 200 php-файлов?


ЧПУ? smile:)

Цитата
спросил бы в форуме, то там мне почему-то не дает создавать темы


Странно, форум доступен всем после регистрации на сайте.
Возможно, что-то изменилось в вашем профиле с последнего активного захода.
Романчев Валерий
26.02.2008 20:48:03
ЧПУ бы сделали вот так
http://www.1c-bitrix.ru/blog/rsv/268/
ну в крайнем случае вот так
http://www.1c-bitrix.ru/blog/rsv/268.html
Зачем php-то на конце цеплять?
Быков Павел
04.04.2008 13:48:19
Так настроены ЧПУ для модуля блогов по-умолчанию
Илья Азаров
03.05.2008 20:34:36
Вы правы. на виртуале тонким местом становится PHP.
Однако для своих проектов я делал модуль кеша на файлах который на моем ноуте давал 700 запросов в секунду. На php.
Но. Единственное тонкое место - удаление файлов кеша когда припрет. От него пришлось отказаться smile:)
Потому что несколько тысяч подкаталогов единомоментно мочить - большая проблема.

Благодаря flock на файлах внутри подподподкаталогов и чекпойнтов проблему решил. Просто делали файлики неактуальными )


>* если сохраняемый объем приводит к превышению дисковой квоты кеша, то кеш полностью очищается;
>* так же полная очистка кеша происходит при любом изменении данных в административной части системы;
Вопрос а как сброс проводите? smile:)
По крону - перемещение плюс рекурсивное удаление? Или во время работы скриптов?
+учет размера кеша?
>Из всего выше сказанного следует, что:
Последствия в такой полустатической системе неизбежны да... Тут придется баннеры и прочее отдать внешним севисам. smile:)


Видео-презентация продукта "1С-Битрикс: Корпоративный портал"
Комплексное продвижение сайтов в Интернете
Онлайновые учебные курсы