我只是想知道在 Perl 中创建 Web 服务时,什么最能提高性能。
是否最好使用尽可能短的 .pl 脚本并将尽可能多的代码放在 .pl 脚本使用的模块中,或者如果我根本不使用模块,它不会影响性能吗?
我在mod_perl
带有 perl 5.8.8 的 CentOS Linux 机器上使用。
由于您使用的是mod_perl
,因此将代码分散到任意数量的文件中不会造成明显的性能损失。为您的代码使用模块、小型、可测试的函数和面向对象的结构将使其更易于维护、可重用和可扩展。而且您根本不需要.pl
脚本,因为您使用的是mod_perl
. 只需执行以下操作:
httpd.conf
PerlModule My::WebApp
<Location /app>
SetHandler perl-script
PerlHandler My::WebApp
</Location>
My/WebApp.pm
package My::WebApp;
use strict;
use warnings;
use Apache2::Const -compile => qw(OK);
sub handler {
my $r = shift; # apache request object
# do stuff
return Apache2::Const::OK;
}
使用 Web 应用程序框架使其变得更加容易。CGI::Application内置了出色的 mod_perl 支持。
使用 mod_perl 编写模块有性能优势。您可以在启动时让 Apache 加载模块。这样,它们就被编译并准备好在它派生一个新孩子时使用。他们还可以在启动时完成工作并共享该工作,而不是让每个孩子都重新做一遍。它还有可能使编译后的代码驻留在共享内存中,从而减少内存占用。
这是有关 Apache 2.x和Apache 1.x的一些信息。在 Apache 2 中,您的策略会根据您使用的工作模型有所不同。
但更重要的是模块更容易测试、记录和重用。
警告:自从我对 mod_perl 进行性能优化以来已经有一段时间了。
无论您在做什么,都应该将人们如何运行您的程序与其所有功能区分开来。将您的代码分成模块,它们不会与您正在做的任何其他事情紧密耦合。应用程序的 Apache 特定部分应该只是一个处理请求与其余代码之间连接的薄层。
您最好考虑可维护性。去模块。当您使用 mod-perl 时,无需担心这可能导致的性能问题。