【问题标题】:Best way to reduce perl startup time减少 perl 启动时间的最佳方法
【发布时间】: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 内部调用的。

标签: perl bytecode regexp-grammars


【解决方案1】:

有一些方法可以运行持久性脚本。通常它们在网络服务器上下文中使用,但没有理由不将它们用于其他目的。

一个这样的系统是CGI::SpeedyCGI,这可能是也可能不是我的想法。这目前也称为PersistentPerl

【讨论】:

  • 很遗憾,这些 2003 软件包无法在最近的 Ubuntu 上编译。
猜你喜欢
  • 1970-01-01
  • 2018-04-12
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
相关资源
最近更新 更多