我只是想知道在Perl中创建Web服务时性能最佳。
最好尽可能缩短.pl脚本并在.pl脚本使用的模块中放置尽可能多的代码,否则如果我不使用模块,它不会影响性能所有?
我在使用perl 5.8.8的CentOS Linux机器上使用mod_perl
。
答案 0 :(得分:4)
由于您使用的是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支持。
答案 1 :(得分:4)
使用mod_perl编写模块有一个性能优势。您可以在启动时使用Apache加载模块。这样他们就会被编译好并准备好在它要求一个新孩子的时候去。他们也可以在创业时工作并分享这项工作,而不是每个孩子都必须重做。它还有可能将已编译的代码驻留在共享内存中,从而减少内存占用。
这是some info about Apache 2.x和Apache 1.x。在Apache 2中,您的策略根据您正在使用的工作模型而有所不同。
但更重要的是模块更容易测试,记录和重用。
警告:自从我完成mod_perl的性能优化以来已经有一段时间了。
答案 2 :(得分:3)
无论您在做什么,都应该将人们运行程序的方式与其所有功能区分开来。将代码分成不与您正在执行的任何其他操作紧密耦合的模块。应用程序的Apache特定部分应该只是一个薄层,用于处理请求与其余代码之间的连接。
答案 3 :(得分:2)
您最好考虑可维护性。去模块。当您使用mod-perl时,无需担心这可能导致的性能问题。