parser

/faq/faq
/authors/авторы
/docs/документация

/powered_by_parser/в действии
/feedback/куда говорить
/jargon/жаргон

/download/скачать

/examples/примеры
/forum/форум



Поиск по форуму

По умолчанию ключевое слово ищется только в заголовке сообщения.

Ключевое слово:

Фильтровать по автору:



Немножко про оптимизацию парсерного кода...

Misha 23.10.2001 13:24

У парсера есть хороший оператор ^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 секунду (!!!) резко снижает загрузку проца, но... требует больше места на диске...

<<  Вернуться к списку сообщений


E-mail: mailbox@parser.ruCopyright © 1997-2001 Студия Артемия Лебедева