我见过有人提到Embperl是最快的Perl web框架(听起来像是没有事实根据的观点,而且过时了)。
我想知道是否对主要的稳定Perl web框架的相对速度达成了共识,或者理想的情况下,在相同示例webapp的实现之间或单个功能(例如会话处理或表单数据处理)之间进行某种基于事实的性能比较,等等。
UPDATE:这个问题是,特别是关于不同框架的速度比较,执行相同/等效任务的。我欣赏良好的意图,但我已经知道,速度不是我应该考虑的唯一标准。我不是在寻求哲学上的建议。信不信由你,作为框架,你可以通过运行目标相同的任务/代码/应用程序来比较它们的速度(例如,用给定的模板插入来呈现一个给定的表单等等),即使每个框架的全部功能并不是100%相同。
发布于 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
发布于 2011-01-22 20:35:01
我不想进入解释讨论(对于大多数真实世界的场景,这些间接费用根本不会产生任何影响)--但下面是我的测试:
1.纯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 #/秒
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.结果:每秒请求: 763.72 #/秒
4.催化剂。
不幸的是,代码太长了,无法在这里完整地显示,但是根控制器包含:
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
{
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 #/秒
在添加了更多功能之后,这种情况将发生变化。
发布于 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来说是一场精彩的比赛。应用程序。
https://stackoverflow.com/questions/4687127
复制相似问题