Я работаю над парсером Perl в течение нескольких лет, хотя, поскольку он всегда был в предварительной альфа, я никогда не беспокоился о его ускорении. Тем не менее, я начал работать над тем, как его оптимизировать, и был удивлен тем, что нашел.Лучший способ сократить время запуска perl
После некоторых алгоритмических и регулярных оптимизаций нормальное выполнение занимает около 3,5 секунд, из которых около 2,3 - это время, которое требуется для запуска Perl (которое я измерил с помощью «time perl scriptname.pl» после того, die («Готово»), «в первой строке». Я понимаю, что Regexp :: Grammars - это не самый быстрый модуль Perl, но кажется, что его инициализация занимает гораздо больше времени, чем выполнение скрипта.
Поэтому я начал искать простой способ скомпилировать его до байт-кода перед его запуском. Кажется, B :: Bytecode, единственный функциональный способ сделать это, больше не поддерживается или не включен в основной дистрибутив Perl. Есть ли простой способ уменьшить время запуска?
Спасибо!
Какие модули использует ваш парсер, кроме Reggexp :: Grammars? – DavidO
Компиляция Regexp :: Grammars принимает только 0.03s в моей системе. Вероятно, это инициализация внутренних структур Reggexp :: Grammars, которая здесь медленная, но компиляция в байт-код не помогла бы в этом случае (но, возможно, какая-то сериализация внутреннего состояния?). –
У меня создается впечатление, что B :: Bytecode фактически делал вещи * медленнее * – ikegami