短脚本,长模块或长脚本,短模块?

时间:2009-08-07 09:28:32

标签: linux perl module mod-perl

我只是想知道在Perl中创建Web服务时性能最佳。

最好尽可能缩短.pl脚本并在.pl脚本使用的模块中放置尽可能多的代码,否则如果我不使用模块,它不会影响性能所有?

我在使用perl 5.8.8的CentOS Linux机器上使用mod_perl

4 个答案:

答案 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.xApache 1.x。在Apache 2中,您的策略根据您正在使用的工作模型而有所不同。

但更重要的是模块更容易测试,记录和重用。

警告:自从我完成mod_perl的性能优化以来已经有一段时间了。

答案 2 :(得分:3)

无论您在做什么,都应该将人们运行程序的方式与其所有功能区分开来。将代码分成不与您正在执行的任何其他操作紧密耦合的模块。应用程序的Apache特定部分应该只是一个薄层,用于处理请求与其余代码之间的连接。

答案 3 :(得分:2)

您最好考虑可维护性。去模块。当您使用mod-perl时,无需担心这可能导致的性能问题。