Как сократить время запуска сценария Perl CGI? - PullRequest
5 голосов
/ 27 марта 2009

Я разрабатываю некоторые CGI-скрипты и пытаюсь найти решение, чтобы уменьшить «время запуска», возникающее при импорте большого количества модулей с «использованием».

Обновление:

Предлагаемые решения хороши, но скрипты, которые я работаю, работают как в режиме консоли, так и в режиме CGI, проверяя наличие некоторых типичных переменных среды HTTP.

В «режиме консоли» они выводят данные «в обычном режиме», а в «режиме html» производят некоторые замены в реальном времени и отправляют другие заголовки HTTP клиенту.

Я бы хотел улучшить время запуска в обоих случаях.

Ответы [ 6 ]

12 голосов
/ 27 марта 2009

Попробуйте использовать CGI :: Fast , чтобы запустить один процесс perl для обработки нескольких запросов. Мне потребовалось очень мало усилий, чтобы изменить некоторые из моих больших CGI-скриптов на CGI :: Fast. В отличие от mod_perl, на хостинг-сайтах очень легко запускать CGI :: Fast, потому что вы можете перезапустить свои скрипты без перезапуска Apache (по крайней мере, так сказал мой хостер, когда я спросил mod_perl).

10 голосов
/ 27 марта 2009

Как насчет использования mod_perl для запуска ваших скриптов?

9 голосов
/ 27 марта 2009
  • Убедитесь, что это действительно ваше узкое место
  • Только нужные вам модули импорта
  • Убедитесь, что вам не нужно искать в миллионе мест, чтобы найти их
  • Рассмотрите возможность запуска процессов с дорогостоящим запуском (например, в качестве демона) и используйте более легкие CGI-скрипты для их запуска
  • Посмотрите на различные ускорители, а не выполняйте полный CGI из оболочки (зависит от того, что вы используете для обслуживания страниц).
4 голосов
/ 27 марта 2009

Вы всегда можете попробовать less pragma:

use less 'starttime';

Конечно, это зависит от системы *. Лучше всего использовать mod_perl или один из модулей FastCGI: CGI :: Fast , FCGI , и т. Д. .

Если требуется быстрое выполнение из командной строки, возможно, вы захотите перейти на архитектуру клиент / сервер (которой является FastCGI).

* предупреждение, что ни одна система в настоящее время не использует опцию времени запуска для менее прагмы.

2 голосов
/ 28 марта 2009

Ну, другие уже предположили, что CGI может быть вашей проблемой здесь, поэтому я буду считать, что вы не можете удалить CGI с картинки.

Возможно, вы захотите рассмотреть эту старую статью . По-видимому, одним из источников медленного запуска является огромный @INC, поэтому консолидация всего в коротком PERL5LIB, кажется, очень помогает (кажется, это справедливое предположение, но я никогда не пробовал).

В качестве альтернативы (или дополнительно), если вы не возражаете платить некоторую цену во время выполнения, вы можете использовать Class :: Autouse

Наслаждайтесь!

1 голос
/ 30 марта 2009

Попробуйте использовать SpeedyCGI или Persistent Perl.

Оба реализуют примерно одну и ту же идею: вместо интерпретатора Perl они являются оберткой, которая анализирует программу и сохраняет ее в памяти, тем самым экономя время, необходимое для инициализации интерпретатора и анализа при каждом запуске.

Это должно хорошо работать с описанной вами установкой с двумя средами, что не может / не может иметь место при использовании CGI :: Fast или mod_perl.

РЕДАКТИРОВАТЬ Если это поможет, хорошо. Если этого не произойдет, вам придется измерить, где ваш скрипт тратит время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...