14

Embperl が最速の Perl Web フレームワークであるという言及 (根拠のない意見や時代遅れの意見のように聞こえます) を見たことがあります。

主要な安定した Perl Web フレームワークの相対速度、または理想的には、同じサンプル Web アプリケーションの実装間、または個々の機能 (セッション処理やフォーム データ処理など) 間の事実に基づいたパフォーマンス比較のようなものについて、コンセンサスがあるかどうか疑問に思っていました。など…?

更新:この質問は、特に、同一/同等のタスクを実行する、異なるフレームワークの速度比較に関するものです。私は善意に感謝していますが、私が見るべき基準はスピードだけではないことをすでに知っています. 私は哲学的なアドバイスを求めていたわけではありません。信じられないかもしれませんが、フレームワークであるため、同じ目的のタスク/コード/アプリをそれらで実行することにより、実際にアップルごとに速度を比較できます (たとえば、テンプレート化された挿入の特定のセットを使用して特定のフォームをレンダリングするなど.. .)、各フレームワークの完全な機能が 100% 同じでなくても。

4

4 に答える 4

12

解釈の議論には入りたくありません (ほとんどの現実世界のシナリオでは、これらのオーバーヘッドはまったく影響しません) - しかし、ここに私のテストがあります:

1. ピュア・プラック

zby@zby:~/progs/bench$ cat app.psgi 

sub {
   my ( $env ) = @_;
   return [
       200,
       [ 'Content-Type' => 'text/text' ],
       [ 'Hello World' ]
       ];
}
zby@zby:~/progs/bench$ plackup
HTTP::Server::PSGI: Accepting connections at http://0:5000/

シンプルab -n 10000で私は得る

1 秒あたりのリクエスト数: 2168.05 [#/秒] (平均)

2. ダンサー

zby@zby:~/progs/bench$ cat dancer.pl 
 #!/usr/bin/perl
           use Dancer;

           get '/' => sub {
               return "Why, hello there";
           };

           dance;
zby@zby:~/progs/bench$ perl dancer.pl 
>> Dancer server 1950 listening on http://0.0.0.0:3000
== Entering the development dance floor ...

同様のabテストで私は得る Requests per second: 1570.49 [#/sec] (mean)

3.モジョリシャス::ライト

zby@zby:~/progs/bench$ cat mojo.pl 
 # Using Mojolicious::Lite will enable "strict" and "warnings"
    use Mojolicious::Lite;

    # Route with placeholder
    get '/' => sub {
        my $self = shift;
        $self->render(text => "Hello!");
    };

    # Start the Mojolicious command system
    app->start;
zby@zby:~/progs/bench$ perl mojo.pl daemon
Sat Jan 22 20:37:01 2011 info Mojo::Server::Daemon:320 [2315]: Server listening (http://*:3000)
Server available at http://*:3000.

結果: 1 秒あたりのリクエスト数: 763.72 [#/秒] (平均)

4.触媒。

残念ながら、コードは長すぎてここにすべてを示すことはできませんが、ルート コントローラーには次のものが含まれています。

sub index :Path :Args(0) {
    my ( $self, $c ) = @_;

    # Hello World
    $c->response->body( 'Hello World' );
}

結果は次のとおりです。

1 秒あたりのリクエスト数: 727.93 [#/秒] (平均)

5. ウェブナノ

zby@zby:~/progs/bench$ 猫 webnano.psgi

{
    package MyApp;
    use base 'WebNano';
    1;
}

{
    package MyApp::Controller;
    use base 'WebNano::Controller';

    sub index_action {
        my $self = shift;
        return 'This is my home';
    }
    1;
}    
MyApp->new()->psgi_callback;
zby@zby:~/progs/bench$ plackup webnano.psgi 
HTTP::Server::PSGI: Accepting connections at http://0:5000/

そして結果:

1 秒あたりのリクエスト数: 1884.54 [#/秒] (平均)

これは、いくつかの機能が追加された後に変更されます。

于 2011-01-22T20:35:01.883 に答える
9

これは、速度 (起動) とフレームワーク自体が消費するメモリに関して、perl フレームワーク間の比較の 1 つです。少し古い (2008) ので、Plack のような新しいものとは比較しません。

http://mark.stosberg.com/blog/2008/11/startup-benchmarks-for-mojo-catalyst-titanium-httpengine-and-cgiapplication.html

于 2011-01-14T14:06:51.700 に答える
7

これがあなたに直接答えないことは知っていますが、最新の比較が存在するとは思いませんし、包括的な比較も存在しないことを知っています. Perl には非常に多くのフレームワークがあり、DB/テンプレート/サーバーの順列が非常に多く、アプリのさまざまな種類の使用パターンがパフォーマンスに大きな違いをもたらす可能性があるため、完全なベンチマークを実行するには、少なくとも数週間の作業が必要です。それも。

Mark の単純な 2008 年のベンチマークを探求の答えとすることで、多くのことを見逃していると思います。展開は、スピードのための Web フレームワーク以上に重要ではありません。たとえば、Catalyst は生の「hello world」速度戦争に勝つつもりはありませんが、BBC のビデオ Catalyst アプリケーションは 1,000 の同時ビデオを提供できます。柔軟性、スケーラビリティ、およびさまざまな展開のサポートは、Web フレームワークを選択する際の大きな要因になります。

プラックは新しくメジャーです。わずか 1 年で、大規模な採用、ミドルウェア/プラグインの成長、ほぼすべてのフレームワークからのサポートが見られました。Plack アプリ用のStarmanエンジンは驚くほど高速で、ホット リロードとワーカー プロセスのインクリメント/デクリメントをサポートしています。ほとんどすべての Perl フレームワークが .psgi として実行できるようになったため、Starman + nginx (または lighttpd) で必要なものを実行できます。過去 2 年間で、Web フレームワーク スペースには多数の優れた展開の組み合わせがあり、かなりの数の変更と新しいエントリがありました。

最新の Web を扱っている場合は、WebSocket をサポートするキットを選択してください。それだけで、従来の Ajax よりも劇的にパフォーマンスが向上します。小さなリクエスト/レスポンスは、websocket を使用すると 100 分の 1 に小さく/軽量化できます。

補足: modperl は、リクエスト サイクルへの深いフックが必要でない限り、現時点で選択するのに最適な永続的な展開ではありません。これには多くの注意点やしわがあり、Apache に結び付けられます (優れたサーバーですが、ロング ショットによる最速のオプションではありません)。

ハッピーハンティング!

2016 年 10 月 20 日更新: uWSGI は、 Perl の PSGI アプリに最適です。

于 2011-01-14T19:47:02.437 に答える