FAQ по perl и программированию для web - Оптимизация CGI-программ
ОГЛАВЛЕНИЕ
6. Ускоряемся
6.1 Моя CGI программа работает слишком медленно/создает большую нагрузку на сервер/etc. Что делать?
- Вкомплировать интерпретатор в сервер (mod_dtcl, mod_perl, pyapache для apache, серверы с поддержкой servlets, AOL server с его поддержкой tcl).
- Переделать на FastCGI или аналогичную технологию.
- Переписать ее на компилируемый язык, если написано на скриптовом. Тем самым вы избавитесь от оверхедов интерпретатора.
- Взять более мощный сервер (IBM RS/6k F50, к примеру :-)
6.2 Что такое mod_perl?
Это perl, вкомпилированный в apache, что придает многие преимущества:
- Скрипты и модули компилируются один раз, что значитльно увеличивает скорость ответа на запрос HTTP (до 2000%);
- Можно написать свои обработчики различных стадий запроса;
- Кеширование сединений с сервером БД -- еще прибавка к скорости;
- Директива SSI #perl позволяет в server-parsed html вызывать функции perl;
- секции <perl></perl> в конфиге apache, для его конфигурирования;
Правда, ничего не дается даром и самый важный недостаток mod_perl -- огромный расход памяти: если обычный apache занимает при работе обычно меньше мегабайта, то apache с mod_perl размером в 10-15 Mb -- вполне нормальное явление. Но, при правильной настройке, значительная часть этой памяти будет shared между копиями процессов.
Основной сайт про mod_perl - http://perl.apache.org, в частности великолепный mod_perl Guide на http://perl.apache.org/guide/.
6.3 В чем разница между скриптом для CGI и mod_perl?
Программа CGI исполняется один раз, за тем умирает. Под mod_perl же она загружается и исполняется до смерти сервера (в случае использования Apache::Registry, см. далее), поэтому она требует более аккуратного описания - закрывать файлы, не использовать много памяти, и тд.
Более подробно о переписывании программ CGI под mod_perl - http://perl.apache.org/guide/porting.html.