Perl Web框架之间是否有任何性能比较?

DVK*_*DVK 14 perl performance web-frameworks catalyst embperl

我看过提及(这听起来像未经证实的意见,以及那些过时的意见),Embperl是最快的Perl Web框架.

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

更新:这个问题具体是关于不同框架的速度比较,执行相同/等效的任务.我很欣赏良好的意图,但我已经知道速度并不是我应该关注的唯一标准.我没有要求提供哲学建议.不管你信不信,作为框架,你实际上可以通过在它们上运行相同目的的任务/代码/应用来比较它们在苹果到苹果的基础上的速度(例如,使用给定的一组模板化插入来呈现给定的形式等等. .),即使每个框架的完整功能不是100%相同.

zby*_*zby 11

我不想进入解释讨论(对于大多数现实世界的场景,这些开销根本没有影响) - 但这是我的测试:

1. Pure Plack

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/
Run Code Online (Sandbox Code Playgroud)

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 ...
Run Code Online (Sandbox Code Playgroud)

我得到了类似的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.
Run Code Online (Sandbox Code Playgroud)

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

4.催化剂.

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

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

    # Hello World
    $c->response->body( 'Hello World' );
}
Run Code Online (Sandbox Code Playgroud)

结果是:

每秒请求数: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/
Run Code Online (Sandbox Code Playgroud)

结果如下:

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

添加一些更多功能后,这将更改.

  • 这有点无意义,因为您实际上是对Web服务器进行基准测试.试试在Feersum上运行的Plack应用程序(而不是HTTP :: Server :: PSGI),你可能会得到每秒请求数量的10倍.尝试在您的应用程序中实际执行某些操作,您会发现所有框架的性能都是相同的. (2认同)

bvr*_*bvr 10

这是perl框架之间的一个比较,在速度(启动)和框架本身消耗的内存方面.这有点旧(2008年),所以它不比较普拉克这样的新东西.

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

  • 我写了上面的比较,并不会选择基于上面的框架.一旦您有一个真正的应用程序用于您自己的目的,组合基准.您可能会发现,从大图来看,框架所起的贡献很小,而较慢的框架*可能是一个更好的选择,因为除了速度之外还有其他特性. (2认同)

Ash*_*ley 7

我知道这不会直接回答你,但我不认为存在最新的比较,而且我知道全面的比较不存在.至少需要花费几周时间来完成一个彻底的基准测试,因为现在Perl中有如此多的框架,有如此多的DB/Template/Server排列和应用程序的不同使用模式可能会产生重大的性能差异太.

我相信,通过将Mark简单的2008基准测试作为您的任务的答案,您将会失去很多.部署与速度的Web框架一样重要.例如,Catalyst不会赢得原始的"hello world"速度战,但BBC的视频Catalyst应用程序可以提供1,000个并发视频.灵活性,可伸缩性和对不同部署的支持成为选择Web框架的一个重要因素.

普拉克是新的和主要的.在短短一年时间里,它被广泛采用,中间件/插件增长以及来自几乎所有框架的支持.用于plack应用程序的Starman引擎速度惊人,支持热重载和工作进程增量/减量.因为现在几乎所有的Perl框架都可以作为.psgi运行,所以你可以在Starman + nginx(或lighttpd)上运行你想要的任何东西.在过去的两年中,Web框架领域中有许多良好的部署组合和相当多的更改和新条目.

如果你正在做现代网络的东西,一定要选择带有websocket支持的套件.仅此一项就会比传统的Ajax大幅提升性能; 使用websockets,小的请求/响应可以小100倍/轻.

旁注:除非您需要在请求周期中进行深度挂钩,否则modperl可能不是此时要选择的最佳持久性部署.它有许多警告和皱纹,并将你与apache联系在一起(一个伟大的服务器,但远远不是最快的选择).

快乐狩猎!

2016年10月20日更新:uWSGI是 Perl中PSGI应用程序的绝佳搭档.

  • Apache/mod_perl可能不是我搜索的灵活选项,但由于我还不确定,我很高兴你提到其他选项.+1非常彻底和周到的答案. (3认同)
  • websockets听起来非常有趣 - 谢谢你提到这个想法.然而,实际上,他们似乎几乎没有任何方面的支持(没有IE,没有生产FF,并且由于FF4和Opera中的安全问题而被关闭(http://en.wikipedia.org/wiki/WebSockets#Browsers_supporting_WebSocket) (3认同)

nic*_*ick 5

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

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