减少 perl 启动时间的最佳方法
Posted
技术标签:
【中文标题】减少 perl 启动时间的最佳方法【英文标题】:Best way to reduce perl startup time 【发布时间】:2014-01-02 10:14:55 【问题描述】:多年来,我一直在断断续续地研究 Perl 解析器,但由于它一直处于预 alpha 阶段,所以我从不担心加快它的速度。但是,我已经开始研究优化它的方法,并且对我的发现感到惊讶。
经过一些算法和正则表达式优化后,正常执行大约需要 3.5 秒,其中大约 2.3 秒是 Perl 启动所需的时间(我在放入“die”后用“time perl scriptname.pl”测量(“完成”);“在第一行)。我知道 Regexp::Grammars 不是目前最快的 Perl 模块,但它的初始化似乎比实际执行脚本花费的时间要长得多。
因此,我开始研究一种在运行之前将其编译为字节码的简单方法。似乎 B::Bytecode,唯一的功能性方法,不再维护或包含在主要的 Perl 发行版中。有什么简单的方法可以缩短启动时间?
谢谢!
【问题讨论】:
除了 Regexp::Grammars 之外,您的解析器还使用哪些模块? 在我的系统上编译 Regexp::Grammars 只需要 0.03 秒。可能是内部 Regexp::Grammars 结构的初始化在这里很慢,但在这种情况下编译为字节码无济于事(但可能是某种内部状态的序列化?)。 我的印象是 B::Bytecode 实际上让事情变得更慢 用Devel::NYTProf
分析执行,然后优化最慢的部分。不要在猜测上浪费你的时间(人类真的不擅长估计性能)。
谢谢阿蒙。我设法将其追溯到 Text::Balanced 中的一个调用,这似乎是由 Regexp::Grammars 内部调用的。
【参考方案1】:
有一些方法可以运行持久性脚本。通常它们在网络服务器上下文中使用,但没有理由不将它们用于其他目的。
一个这样的系统是CGI::SpeedyCGI,这可能是也可能不是我的想法。这目前也称为PersistentPerl。
【讨论】:
很遗憾,这些 2003 软件包无法在最近的 Ubuntu 上编译。以上是关于减少 perl 启动时间的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章