parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Кеширование классов, загруженных при конфигурировании в режиме веб-сервера

moko 06.10 01:19

В режиме веб-сервера парсер при запуске выполняет конфигурационный auto.p. Теперь все загруженные в процессе его выполнения классы по умолчанию кешируются, и обработка запроса начинается с добавления этих классов из кеша (без компиляции). Эту возможность можно выключить при сборке (хотя накладные расходы на фичу минимальны: один if на метод, ifdef сделан скорее для большей наглядности изменений) и при выполнении ($HTTPD[ $.code-cache[false] ]).

Кроме того, добавлен метод ^reflection:used[], который выдает массив дисковых путей загруженных на текущий момент файлов.

Таким образом, если в конце обработки страницы вызвать ^reflection:used[], сохранить полученный список в файл и добавить в cgi/auto.p ^use указанного списка, то в режиме веб-сервера обработка страницы будет идти полностью из кеша, без считывания кода с диска и его компиляции. Впрочем, как уже говорилось, парсер компилирует ~30 мегабайт кода в секунду (понятно, зависит от CPU и конкретного кода, но порядок такой).

При использовании описанного подхода на сайте parser.ru получены следующие результаты:
1. Контентная страница (главная, авторы, etc.). Объем парсерного кода: ~200 Kb. Время генерации страницы без кеширования ~72 ms, с кешированием ~61 ms, выигрыш ~11 ms.
2. Главная страница форума. Объем парсерного кода: ~370 Kb. Время генерации страницы без кеширования ~128 ms, с кешированием ~101 ms, выигрыш ~27 ms.

Понятно, что результат будет зависеть от конкретного сайта и объема загружаемого кода. В данном случае компиляция занимает ~15–20% от общего времени генерации. При большом объеме кода и высокой нагрузке на сервер, наверное, можно потратить время на настройку кеширования, но в данном случае (и на большинстве наших сайтов) особого смысла нет: все и так быстро работает. :) Да, через пару часов будет в ночных сборках.

  • Кеширование классов, загруженных при конфигурировании в режиме веб-сервера, moko [M] 06.10 01:19