我正在开发一些 CGI 脚本,并试图找到一种解决方案来减少当我导入大量带有“使用”的模块时产生的“启动时间”。
更新:
提供的解决方案很好,但我正在工作的脚本在控制台和 CGI 模式下运行,检查是否存在一些典型的 HTTP 环境变量。
在“控制台模式”中,它们“正常”转储数据,在“html 模式”中,它们进行一些实时替换并将其他 HTTP 标头发送到客户端。
我想在这两种情况下改善启动时间。
我正在开发一些 CGI 脚本,并试图找到一种解决方案来减少当我导入大量带有“使用”的模块时产生的“启动时间”。
更新:
提供的解决方案很好,但我正在工作的脚本在控制台和 CGI 模式下运行,检查是否存在一些典型的 HTTP 环境变量。
在“控制台模式”中,它们“正常”转储数据,在“html 模式”中,它们进行一些实时替换并将其他 HTTP 标头发送到客户端。
我想在这两种情况下改善启动时间。
考虑使用CGI::Fast来启动一个 perl 进程来处理多个请求。将我的一些大型 CGI 脚本更改为 CGI::Fast 花费了我很少的精力。与 mod_perl 不同,在托管站点上运行 CGI::Fast 非常容易,因为您可以在不重新启动 Apache 的情况下重新启动脚本(至少当我要求 mod_perl 时,我的托管人告诉我)。
使用mod_perl来运行你的脚本怎么样?
好吧,其他人已经建议 CGI 可能是你的问题,所以我认为你不能从图片中删除 CGI。
您可能要考虑这篇旧文章。显然,启动时间缓慢的一个原因是巨大的@INC,因此将所有内容整合到一个简短的 PERL5LIB 中似乎有很大帮助(这似乎是一个公平的假设,但我从未尝试过)。
或者(或另外),如果您不介意在运行时支付一些价格,您可以使用Class::Autouse
享受!
尝试使用 SpeedyCGI 或 Persistent Perl。
两者都实现了大致相同的想法:它们不是 Perl 解释器,而是一个解析程序并将其保存在内存中的包装器,从而节省了每次运行时初始化解释器和解析所需的时间。
这应该适用于您描述的双环境设置,使用 CGI::Fast 或 mod_perl 时可能/可能不是这种情况。
编辑如果这有帮助,很好。如果没有,您将不得不测量您的脚本在哪里花费其运行时间。