|
|
Немножко про оптимизацию парсерного кода...
У парсера есть хороший оператор ^cache[], который теперь можно по нормальному использовать (и мы его успользуем в проектах)
Например: есть кусок сайта, который выводит информацию о продуктах... Данные о продуктаж лежат в БД. Их можно оттуда извлечь и показать, но для того, чтобы правильно и красиво отобразить положение продукта в линейке продуктов, показать приаттаченые документы, которые тоже лежат в базе и сделать кучу всего ещё требуется достаточно много запросав к базе данных, что не очень быстро в общей сложности.
В то-же самое время сама информация о продуктах меняется не очень часто, и нету большой нужны каждый раз обсчитывать каждую страничку. Хорошо было-бы один раз ее посчитать, положить где-нить, и следующим посетителям давать уже готовую, пока не обновится база данных (или пока не кончится время жизни кэш-файла).
Это и призван делать ^cache
Он создает файл, в который все складывает.
Например вызов:
^cache[^uri[];
# тут очень много sql запросов или каких ещё вычислений
;600]
при отсутствии файла с ключем ^uri[] выполник код, а потом положит его в этот файл, и последующие запросы этой странички не будут вызывать вычисления тела, будет просто браться содержимое этого файла.
Так будет до тех пор, пока не заканчится время жизни (600 сек == 10 мин) или пока кто-либо не удалит этот файл кэша.
Например, если изменение БД осуществляется через административный интерфейс, то можно при любом изменении грохнуть весь кэш :)
Он прозрачно создастся заново. Или, если вы интеллектуал :) можете грохнуть кэши по маске, чтобы грохнулись файлы, на которых изменение БД отразится.
Ещё hint, как это ОБЫЧНО использую я:
^var[cache_key;^match[^^([^^=]*=);;;^query[]]]
^cache[^var[cache_key]^var[platform]^var[browser];
^macro[server;
...
]
;^eq[^env[REQUEST_METHOD];POST;0;^default[^var[cache_time];^var[default_cache_time]]]]
Я создаю отдельный ключ для разной платформы/броузера/урла,
т.к. контент для разных броузеров может отличаться.
Я не кэширую данные, если у меня пришло что-либо post-ом, т.к. скорее всего тут у меня будет динамическая страница.
Ну и ещё у меня есть cfg файл с описанием исключений, который так-же создается автоматически из административного модуля :)
В общем все рассказывать не буду, дерзайте, и учтите, что кэширование _сильно_ нагруженых сайтов даже на 1 секунду (!!!) резко снижает загрузку проца, но... требует больше места на диске...
|