2013-12-14 5 views
4

Я работаю над парсером Perl в течение нескольких лет, хотя, поскольку он всегда был в предварительной альфа, я никогда не беспокоился о его ускорении. Тем не менее, я начал работать над тем, как его оптимизировать, и был удивлен тем, что нашел.Лучший способ сократить время запуска perl

После некоторых алгоритмических и регулярных оптимизаций нормальное выполнение занимает около 3,5 секунд, из которых около 2,3 - это время, которое требуется для запуска Perl (которое я измерил с помощью «time perl scriptname.pl» после того, die («Готово»), «в первой строке». Я понимаю, что Regexp :: Grammars - это не самый быстрый модуль Perl, но кажется, что его инициализация занимает гораздо больше времени, чем выполнение скрипта.

Поэтому я начал искать простой способ скомпилировать его до байт-кода перед его запуском. Кажется, B :: Bytecode, единственный функциональный способ сделать это, больше не поддерживается или не включен в основной дистрибутив Perl. Есть ли простой способ уменьшить время запуска?

Спасибо!

+1

Какие модули использует ваш парсер, кроме Reggexp :: Grammars? – DavidO

+0

Компиляция Regexp :: Grammars принимает только 0.03s в моей системе. Вероятно, это инициализация внутренних структур Reggexp :: Grammars, которая здесь медленная, но компиляция в байт-код не помогла бы в этом случае (но, возможно, какая-то сериализация внутреннего состояния?). –

+1

У меня создается впечатление, что B :: Bytecode фактически делал вещи * медленнее * – ikegami

ответ

1

Есть способы запуска постоянных скриптов. Обычно они используются в контексте веб-сервера, но нет причин не использовать их для других целей.

Одна из таких систем - CGI::SpeedyCGI, что может быть или не быть тем, о чем я думал. В настоящее время это также известно как PersistentPerl.

Смежные вопросы