我正在开发一个使用Perl的网络应用程序,我需要研究加速部分应用程序。

我以为我会开始分析我希望调查的部分的特定调用。我已经完成了一些关于分析Perl代码的搜索,但遗憾的是我发现的大部分内容都说我应该从命令行使用 -d:DProf myapp 运行我的perl代码。这对我来说不太适用,因为我的代码在Web应用程序中。我确实找到了一种方法来使用apache进行分析,但不幸的是,“最常用的”是从分析器返回的模块都是CPAN模块--Class :: xyz等等。不是非常有帮助。

除了我注射“计时器”之外,有没有人知道一个好方法?代码到我想要分析的方法只是针对这些方法?我曾经想过编写一个测试脚本并对其进行分析,但由于我正在研究的代码的性质,这需要比我希望做的更多的工作。

有帮助吗?

解决方案

你有没有尝试过 Devel :: NYTProf (比Devel :: DProf好得多) ),哪些可以在Apache下工作?您使用的是哪个网络服务器?这是一个vanilla CGI脚本,mod_perl还是别的东西?

如果你正在做数据库的东西, DBI :: Profile 可以对您的查询进行基准测试,这是在另一个程序中发生的工作。

然而,真正的诀窍是组织代码,以便您可以进行全方位的测试和分析,而无需在最后将所有内容放在一起以发现某些内容很慢。在短期内,这对火灾没有多大帮助,但从长远来看,它确实可以防止火灾。还有各种方法来伪造Web服务器环境等等,但这是一个不同的问题。 :)

其他提示

如果你正在使用CGI.pm,你可以在命令行上将参数传递给你的perl脚本,CGI.pm将把它们解释为好像它们是作为参数通过HTTP传递的。所以,如果你正在调试,例如

<代码> http://example.com/scripts/example.pl?action=browse& ;搜索=垫圈&安培;限制=嗒嗒

然后你可以从命令行调用,例如

<代码> perl -d:NYTProf documentroot /scripts/example.pl'action = browse&amp; search = grommet&amp; restrict = blah'

您可以使用 基准 核心模块与< strong>:hireswallclock 选项,如果你真的想在内部计时。但实际上,您应该能够从命令行进行配置。您可能必须编写测试脚本来模拟CGI请求的某些部分,但在查找性能瓶颈时,DProf可以极其有用。

特别是,查看代码调用CPAN模块代码的位置。您可能在循环中执行此操作远远超过必要,因此虽然花费在CPAN模块上的时间,但重构代码可以解决问题。

我知道此时它有点晚了,但这是使用 CGI ::应用程序或其他架构,其中Web应用程序只是一个非常简短的面向Web的代码,它使用了您编写的一堆模块来实现实际功能。使用这样的设计可以非常简单地从命令行中单独或集体地分析(或简单地测试)任何模块,而不必担心Web方面。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top