【问题标题】:How can I reduce Perl CGI script start-up time?如何减少 Perl CGI 脚本的启动时间?
【发布时间】:2011-01-15 02:09:51
【问题描述】:

我正在开发一些 CGI 脚本,并试图找到一种解决方案来减少当我导入大量带有“使用”的模块时产生的“启动时间”。

更新:

提供的解决方案很好,但我正在使用的脚本在控制台和 CGI​​ 模式下运行,检查是否存在一些典型的 HTTP 环境变量。

在“控制台模式”中,它们“正常”转储数据,在“html 模式”中,它们进行一些实时替换并将其他 HTTP 标头发送到客户端。

我想改善这两种情况的启动时间。

【问题讨论】:

  • 您是否为每个请求创建一个新进程?
  • 是的,但这并不是我的主要问题,因为有些脚本同时在控制台和 CGI​​ 模式下运行 ^^

标签: perl performance initialization cgi


【解决方案1】:

考虑使用CGI::Fast 来启动一个perl 进程来处理多个请求。将我的一些大型 CGI 脚本更改为 CGI::Fast 花费了我很少的精力。与 mod_perl 不同,在托管站点上运行 CGI::Fast 非常容易,因为您可以在不重新启动 Apache 的情况下重新启动脚本(至少当我要求 mod_perl 时,我的托管人员告诉我)。

【讨论】:

  • +1 # 还需要注意的是,FCGI 不受服务器实现的限制,使其更易于移植。
  • 听起来不错,如果脚本也以控制台模式运行?更多提示?谢谢 :)
  • 可以在不重新启动 mod_perl 的情况下重新启动程序。但 FastCGI 更简单。
【解决方案2】:

使用mod_perl 运行您的脚本怎么样?

【讨论】:

    【解决方案3】:
    • 确保这实际上是您的瓶颈
    • 只导入您需要的模块
    • 确保您无需搜索无数个地方即可找到它们
    • 考虑让启动成本高昂的进程热运行(例如作为守护程序)并使用重量更轻的 CGI 脚本来启动它们
    • 查看各种加速器,而不是从 shell 执行完整的 CGI(取决于您用于提供页面的内容)。

    【讨论】:

      【解决方案4】:

      你总是可以试试less pragma:

      use less 'starttime';
      

      当然,这取决于系统*。最好的办法是使用mod_perl 或FastCGI 模块之一:CGI::FastFCGIetc

      如果需要从命令行快速运行,您可能需要迁移到客户端/服务器架构(这就是 FastCGI 的全部内容)。

      * 警告目前没有系统为 less pragma 实现 starttime 选项。

      【讨论】:

      • 哎呀,好像不太便携^^
      【解决方案5】:

      好吧,其他人已经建议 CGI 可能是您的问题,所以我认为您无法从图片中删除 CGI

      您可能需要考虑this old article。显然,启动速度慢的一个原因是巨大的@INC,因此将所有内容整合到一个简短的 PERL5LIB 中似乎有很大帮助(这似乎是一个合理的假设,但我从未尝试过)。

      或者(或另外),如果您不介意在运行时支付一些费用,您可以使用Class::Autouse

      享受吧!

      【讨论】:

        【解决方案6】:

        尝试使用 SpeedyCGI 或 Persistent Perl。

        两者都实现了大致相同的想法:它们不是 Perl 解释器,而是一个解析程序并将其保存在内存中的包装器,从而节省了初始化解释器和每次运行时解析所需的时间。

        这应该适用于您描述的双环境设置,而使用 CGI::Fast 或 mod_perl 时可能会/可能不会出现这种情况。

        编辑如果这有帮助,很好。如果没有,您将不得不测量您的脚本在哪里花费其运行时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-02
          • 2018-01-09
          • 1970-01-01
          • 1970-01-01
          • 2012-03-10
          • 1970-01-01
          相关资源
          最近更新 更多