14

我看到有人提到 Embperl 是最快的 Perl Web 框架(听起来像是未经证实的观点,而且过时了)。

我想知道是否对主要稳定 Perl web 框架的相对速度达成共识,或者理想情况下,在相同示例 webapps 或单个功能(例如会话处理或表单数据处理)的实现之间进行某种基于事实的性能比较, ETC...?

更新:这个问题专门关于不同框架的速度比较,执行相同/等效的任务。我很欣赏这些良好的意图,但我已经知道速度不是我应该考虑的唯一标准。我不是在寻求哲学建议。信不信由你,作为框架,您实际上可以通过在它们上运行相同目的的任务/代码/应用程序来逐个比较它们的速度(例如,使用一组给定的模板化插入呈现给定的表单等。 .),即使每个框架的全部功能不是 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我得到

每秒请求数:2168.05 [#/sec](平均)

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. Mojolicious::Lite

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.

结果:每秒请求数:763.72 [#/sec](平均值)

4. 催化剂。

不幸的是,代码太长了,无法在此处完整呈现,但 Root 控制器包含:

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

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

结果是:

每秒请求数:727.93 [#/sec](平均值)

5.WebNano

zby@zby:~/progs/bench$ cat 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/

结果:

每秒请求数:1884.54 [#/sec](平均)

添加更多功能后,这将改变。

于 2011-01-22T20:35:01.883 回答
9

这是 perl 框架之间的比较,在速度(启动)和框架本身消耗的内存方面。它有点旧(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 年基准作为您的任务的答案,您会错过很多。部署的重要性不亚于网络框架的速度。例如,Catalyst 不会赢得一场原始的“hello world”速度大战,但 BBC 的视频 Catalyst 应用程序可以提供 1,000 个并发视频。灵活性、可扩展性和对不同部署的支持成为选择 Web 框架的重要因素。

普拉克是新的和主要的。在短短一年内,它就获得了巨大的采用、中间件/插件的增长,以及几乎所有框架的支持。用于 plack 应用程序的Starman引擎速度惊人,并且支持热重载和工作进程增量/减量。由于几乎所有的 Perl 框架都可以作为 .psgi 运行,现在你可以在 Starman + nginx(或 lighttpd)上运行任何你想要的东西。在过去的两年中,Web 框架领域出现了数十种良好的部署组合以及相当多的更改和新条目。

如果你在做现代网络的东西,一定要选择一个支持 websocket 的工具包。与传统的 Ajax 相比,仅此一项就会显着提高性能;使用 websocket 时,小请求/响应可以小 100 倍/轻。

旁注:modperl 可能不是此时选择的最佳持久部署,除非您需要深度挂钩到请求周期。它有许多警告和皱纹,并将您与 apache 联系在一起(一个很棒的服务器,但从长远来看不是最快的选择)。

狩猎愉快!

2016 年 10 月 20 日更新: uWSGI 与Perl中的 PSGI 应用程序完美匹配。

于 2011-01-14T19:47:02.437 回答
5

TechEmpower 对框架性能进行了一些很好的比较。请参阅http://www.techempower.com/benchmarks/

到目前为止,它们已经包含了 4 个 perl 框架(Dancer、Kelp、Mojolicious、Web::Simple)以及来自其他语言的许多框架。如果需要,可以过滤结果以仅显示 Perl 框架。

于 2013-06-18T09:52:27.973 回答