1

私の apache サーバーは、以前は perl で書かれた CGI スクリプトを使用していました。mod_perl を使用すると、標準の cgi スクリプトを使用するよりもはるかに高速であると聞いたので、サーバーに mod_perl をセットアップすることにしました。このページによると、CGI スクリプトを mod_perl で実行するために必要なことは、httpd.conf ファイルを編集することだけでした。httpd の末尾に次の行を追加しました。

LoadModule perl_module libexec/apache2/mod_perl.so
<Location /cgi-bin>
    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    Options ExecCGI
    PerlSendHeader On
    Order allow,deny
    Allow from all
</Location>

私がチェックすると

$ENV{"MOD_PERL"}が存在します
CGI ファイルでは、MOD_PERL 変数が存在するようです。したがって、mod_perl をセットアップして実行していると確信しています。

私の質問は、完全に変更されていないCGI スクリプトで実際にスピードアップが見られるかどうかです。さらに高速化するためにできることはありますか?それとも、スピードアップのためにそれ以上の作業を行う価値はありませんか? 誰もこのタイプのものの経験がありますか?

ドキュメントやフォーラムで答えを探していますが、実際には何も見つかりません。よろしくお願いします。

4

3 に答える 3

5

はい、完全に変更されていないCGIスクリプトは、すべてが正しく構成されている限り、ModPerl :: Registryハンドラーを使用して、mod_perlで高速化されます。

より高速な理由は、Apacheがリクエストごとに新しいインタープリターを起動する代わりに、組み込みのPerlインタープリターを使用してスクリプトを実行するためです。また、スクリプトはキャッシュされてメモリに保持されるため、Perlはスクリプトを再コンパイルしたり、作成したすべてのモジュールをリロードしたりする必要はありませんuse。起動時にModPerl :: RegistryLoaderを使用してスクリプトをロードすることもできます。これにより、スクリプトはすでにキャッシュされ、最初の訪問者があなたのページにアクセスしたときに取得する準備ができています。

どうすればそれらをさらに速くすることができますか?その主題について本を書くことができます。スクリプトの代わりにモジュールにコードを移動することから始めることができます。ネイティブのmod_perlAPIを使用することもできますが、複数のアーキテクチャーをサポートするフレームワークを使用することをお勧めします(それらのほとんどは、mod_perl、psgi / Plack、およびFastCGIのすべてをサポートします)。

注意、ModPerl :: Registryの主な落とし穴は、サブルーチン内のファイルスコープの変数を閉じることができないことです。my変数がキャッシュされます。(warningsオンにすると、これが発生した場合、「$ xは共有されたままになりません」という警告が表示されます。パラメーターとしてサブに渡すか、変数に変更することができourます。)

于 2012-06-13T07:15:01.840 に答える
3

再度ロードする必要はありませんperl。ロードするモジュールは、2回目にロードする必要はありません。スクリプト自体は一度だけコンパイルされます。確かに節約があります。

于 2012-06-13T01:55:49.030 に答える
2

あなたの質問は、同様の質問で部分的に回答されています: VMを必要としないコンパイル済みプログラムで使用すると、CGIはまだ遅いですか?

リンクされた回答とその読み物では、CGI と FastCGI または他のテクノロジ (mod_perl など) の違いについて説明しています。

答えを言い換えて拡張すると
、スピードアップが見られる可能性がありますが、無視できる量である可能性があります。プログラムのワークロードに大きく依存します。多くのリクエストを伴う軽いワークロードでは、最大のパフォーマンス向上が見られる可能性があります。

さらなる最適化を検討するときは、まずそれが必要かどうかを自問してください。プログラムの最適化については、http://en.wikipedia.org/wiki/Program_optimizationでさらに多くの資料を参照してください。

于 2012-06-13T00:10:48.207 に答える