1

我只是想知道在 Perl 中创建 Web 服务时,什么最能提高性能。

是否最好使用尽可能短的 .pl 脚本并将尽可能多的代码放在 .pl 脚本使用的模块中,或者如果我根本不使用模块,它不会影响性能吗?

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

4

4 回答 4

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 支持。

于 2009-08-07T10:05:58.707 回答
4

使用 mod_perl 编写模块有性能优势。您可以在启动时让 Apache 加载模块。这样,它们就被编译并准备好在它派生一个新孩子时使用。他们还可以在启动时完成工作并共享该工作,而不是让每个孩子都重新做一遍。它还有可能使编译后的代码驻留在共享内存中,从而减少内存占用。

这是有关 Apache 2.x和Apache 1.x的一些信息。在 Apache 2 中,您的策略会根据您使用的工作模型有所不同。

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

警告:自从我对 mod_perl 进行性能优化以来已经有一段时间了。

于 2009-08-07T20:19:50.700 回答
3

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

于 2009-08-08T01:18:07.487 回答
2

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

于 2009-08-07T09:35:09.503 回答