Perl で Web サービスを作成する場合、何がパフォーマンスに最適かを考えていました。
できるだけ短い .pl スクリプトを使用し、.pl スクリプトで使用されるモジュールにできるだけ多くのコードを配置するのが最善ですか、それともモジュールをまったく使用しない場合、パフォーマンスに影響しませんか?
mod_perl
Perl 5.8.8 を搭載した CentOS Linux ボックスで使用しています。
mod_perlを使用してモジュールを作成することには、パフォーマンス上の利点があります。起動時にApacheロードモジュールを使用できます。そうすれば、それらはコンパイルされ、新しい子をフォークするときに準備が整います。また、起動時に作業を行い、各子供がもう一度やり直すのではなく、その作業を共有することもできます。また、コンパイルされたコードが共有メモリに常駐し、メモリフットプリントを削減する可能性もあります。
Apache2.xとApache1.xに関する情報を以下に示します。Apache 2では、使用しているワーカーモデルに基づいて戦略が異なります。
しかし、より重要なのは、モジュールのテスト、文書化、および再利用が容易になることです。
警告:mod_perlのパフォーマンスの最適化を行ってからしばらく経ちました。
を使用しているため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 サポートが組み込まれています。
あなたが何をしていても、人々があなたのプログラムをどのように実行するかを、そのすべての機能から分離する必要があります。コードをモジュールに分割し、他の作業と密結合しないようにします。アプリケーションの Apache 固有の部分は、リクエストとコードの残りの部分との間の接続を処理する薄いレイヤーのみにする必要があります。
保守性を考えたほうがいいです。モジュールに行きます。mod-perl を使用している場合、これが引き起こす可能性のあるパフォーマンスの問題について心配する必要はありません。