Performance 我的Perl脚本启动太慢,并且包含许多模块-我可以预编译它吗?

Performance 我的Perl脚本启动太慢,并且包含许多模块-我可以预编译它吗?,performance,perl,perl-module,Performance,Perl,Perl Module,我有一个Perl脚本,其中包括一些自定义Perl模块 我已经使用分析了脚本,我可以看出包括这些Perl模块的成本是我希望最小化的 我已经安装并编译了脚本,使其独立,但它不包括自定义Perl模块 有什么建议吗 编辑: 我需要对脚本进行预压缩,这样就不会在每次调用脚本时都包含编译开销 如果启动时不需要导入某些包,请将使用调用更改为要求,并将它们移动到代码中需要这些包的位置(因此,在需要时导入它们,启动时不必导入)。根据您的程序的复杂程度,在不破坏程序或影响其行为的情况下,找出可以更改哪些调用可能需要

我有一个Perl脚本,其中包括一些自定义Perl模块

我已经使用分析了脚本,我可以看出包括这些Perl模块的成本是我希望最小化的

我已经安装并编译了脚本,使其独立,但它不包括自定义Perl模块

有什么建议吗

编辑:


我需要对脚本进行预压缩,这样就不会在每次调用脚本时都包含编译开销

如果启动时不需要导入某些包,请将
使用
调用更改为
要求
,并将它们移动到代码中需要这些包的位置(因此,在需要时导入它们,启动时不必导入)。根据您的程序的复杂程度,在不破坏程序或影响其行为的情况下,找出可以更改哪些调用可能需要大量的工作



博罗丁的守护进程建议也是一个好建议。启动程序的框架,加载必要的包并等待调用它(可能设置套接字连接或信号处理程序)。然后,当您的程序运行时,
fork
it并调用一些启动程序有用部分的
&main
子例程。

探查器是如何发现模块存在问题的?除了初始加载和编译之外,分离代码几乎没有什么效果。
使用
-安装Perl模块本身成本并不高(除非您需要快速启动应用程序)。你需要提供更多的细节。也许只需关注一个高成本领域,并获得帮助,了解正在发生的事情-从概要报告中提供一些细节,您的理解是什么,以及在这种情况下您正在考虑采取什么措施来提高性能。如果您需要在开始时以同样的速度进行,那么您的设计是错误的。您应该将其作为始终运行的守护进程运行。如果有任何问题,使用
PAR
将使其速度减慢,因为它必须在编译之前解压缩所有内容。
PAR
的目的只是将一个程序及其所有依赖项组合到一个文件中,而不是加快速度。预编译Perl脚本没有好的选择。如果您想缩短启动时间,可以延迟加载模块。有些模块相当重(如Moose),并且有更轻的替代品,您可以使用它们。但我们在这里所能做的只是猜测,因为我们对您的体系结构和程序的问题域一无所知。它是一个快速命令行助手,还是一个在启动时通过十几个Http请求获取其配置的大型应用程序?还请给出硬指标,例如“启动当前需要2秒,必须在500毫秒内完成”。这似乎是可行的方法。我尝试了perlcc,但在Perl5中它并不稳定。