Perl:eval字符串性能问题

时间:2013-09-11 11:03:53

标签: perl eval require

在我的Web应用程序中,我使用下面的代码在运行时动态加载模块,但看起来需要花费大量时间才能使应用程序变慢。

eval {
    eval "require $package_name";
}
if ($@) {
    die"Error while loading module: $@\n";
}

我制作了一个小程序来检查eval "require $package_name";这段代码平均花了多少时间,然后我发现对于网络应用程序来说,这花了将近10秒的时间。

use strict;
use Time::HiRes qw( gettimeofday tv_interval );

my $startTime = [ gettimeofday() ];
print "Time:@{$startTime}->[0]\n";

eval "require Foo::Bar"; # giving example

my $timeSpent = tv_interval( $startTime, [ gettimeofday() ] );
print "Time Spent:$timeSpent\n";

exit 1;

输出:

Time:1378897304
Time Spent:10.627147

所以我的问题是,为什么这需要花费很多时间,还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

是的,是的。

使用apache和mod_perl并在启动时加载模块。

http://www.conceptsolutionsbc.com/perl-articles-mainmenu-41/29-perl-and-apache/55-modperl-part-2-pre-loading-perl-modules

我认为最好的方法是使用一个非常简单的脚本,它只需要你所有使用过的模块:

PerlRequire "/usr/local/apache2/conf/startup.pl"