如何减少Perl CGI脚本的启动时间?

时间:2009-03-27 18:30:24

标签: perl performance initialization cgi

我正在开发一些CGI脚本,我正在尝试找到一种解决方案来减少使用“use”导入大量模块时产生的“开始时间”。

更新

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

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

我想在两种情况下改善启动时间。

6 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:10)

如何使用mod_perl来运行脚本?

答案 2 :(得分:9)

  • 确保这确实是您的瓶颈
  • 仅导入您需要的模块
  • 确保您不必搜索无数个地方才能找到它们
  • 考虑使用昂贵的启动程序运行热门程序(例如作为守护程序)并使用较轻的CGI脚本启动它们
  • 查看各种加速器,而不是从shell执行完整的CGI(取决于您用于提供页面的内容)。

答案 3 :(得分:4)

您可以随时尝试less pragma:

use less 'starttime';

当然,这是系统相关的*。您最好的选择是使用mod_perl或其中一个FastCGI模块:CGI::FastFCGIetc

如果需要从命令行快速启动,您可能需要转移到客户端/服务器架构(这就是FastCGI)。

*警告没有系统当前为较少的pragma实现starttime选项。

答案 4 :(得分:2)

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

您可能需要考虑this old article。显然,启动时间较慢的一个原因是一个巨大的@INC,因此在短的PERL5LIB中整合所有东西似乎都有很大帮助(这似乎是一个公平的假设,但我从来没有尝试过)。

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

享受!

答案 5 :(得分:1)

尝试使用SpeedyCGI或Persistent Perl。

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

这应该可以正常使用您描述的双环境设置,在使用CGI :: Fast或mod_perl时可能会/可能不是这样。

编辑如果这有帮助,那很好。如果没有,则必须衡量脚本在运行时的花费。