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.

6.4 В чем разница между исполнением под Apache::Registry и Apache::PerlRun?

6.5 Как использовать постоянное соединение с БД под mod_perl?

6.6 Что такое FastCGI?