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

时间:2011-01-14 01:16:53

标签: perl performance web-frameworks catalyst embperl

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

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

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

4 个答案:

答案 0 :(得分: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/

简单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 ::精简版

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](平均值)

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:7)

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

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

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

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

旁注:除非您需要深入了解请求周期,否则modperl可能不是此时选择的最佳持久性部署。它有许多警告和皱纹,并将你绑定到apache(一个伟大的服务器,但远远不是最快的选择)。

快乐狩猎!

2016年10月20日更新:Perl中的uWSGI is a fantastic match for PSGI个应用。

答案 3 :(得分:4)

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

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