首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl web框架之间有性能比较吗?

Perl web框架之间有性能比较吗?
EN

Stack Overflow用户
提问于 2011-01-14 01:16:53
回答 3查看 5.4K关注 0票数 14

我见过有人提到Embperl是最快的Perl web框架(听起来像是没有事实根据的观点,而且过时了)。

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

UPDATE:这个问题是,特别是关于不同框架的速度比较,执行相同/等效任务的。我欣赏良好的意图,但我已经知道,速度不是我应该考虑的唯一标准。我不是在寻求哲学上的建议。信不信由你,作为框架,你可以通过运行目标相同的任务/代码/应用程序来比较它们的速度(例如,用给定的模板插入来呈现一个给定的表单等等),即使每个框架的全部功能并不是100%相同。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-14 14:06:51

下面是perl框架之间的一个比较,它涉及到框架本身所消耗的速度(启动)和内存。它有点旧(2008),所以它不比较像Plack这样的新东西。

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

票数 9
EN

Stack Overflow用户

发布于 2011-01-22 20:35:01

我不想进入解释讨论(对于大多数真实世界的场景,这些间接费用根本不会产生任何影响)--但下面是我的测试:

1.纯Plack

代码语言:javascript
复制
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 #/秒

2.舞蹈演员

代码语言:javascript
复制
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.莫灼语::

代码语言:javascript
复制
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 #/秒

4.催化剂。

不幸的是,代码太长了,无法在这里完整地显示,但是根控制器包含:

代码语言:javascript
复制
sub index :Path :Args(0) {
    my ( $self, $c ) = @_;

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

结果是:

每秒请求: 727.93 #/秒

5. WebNano

zby@zby:~/progs/长凳$ cat webnano.psgi

代码语言:javascript
复制
{
    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 #/秒

在添加了更多功能之后,这种情况将发生变化。

票数 12
EN

Stack Overflow用户

发布于 2011-01-14 19:47:02

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

我相信,如果你把马克2008年的简单基准作为你追求的答案,你会错过很多。就速度而言,部署的重要性不亚于web框架。例如,催化剂不会赢得一场原始的“你好世界”速度战,但BBC的视频催化剂应用程序可以同时提供1,000个视频。灵活性、可伸缩性和对不同部署的支持成为选择web框架的一个重要因素。

普拉克是新的专业。在短短一年的时间里,它得到了巨大的采用,中间件/插件的增长,以及几乎每一个框架的支持。plack应用程序的史达曼引擎速度惊人,支持热重加载和工作进程增量/减少。由于几乎所有的Perl框架都可以以.psgi的形式运行,所以现在可以在Starman + nginx (或lighttpd)上运行您想要的任何东西。在过去两年中,web框架空间中有几十个良好的部署组合和相当多的更改和新条目。

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

Sidenote: modperl可能不是此时选择的最佳持久部署,除非您需要在请求周期中使用深度挂钩。它有许多警告和缺点,并将您与apache (一个伟大的服务器,但不是最快的选择长远来看)联系在一起。

狩猎愉快!

更新2016年10月20日:uWSGI对PSGI来说是一场精彩的比赛。应用程序。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4687127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档