我看过提及(听起来像未经证实的意见,以及那些过时的意见),Embperl是最快的Perl Web框架。
我想知道是否就主要稳定的Perl Web框架的相对速度达成共识,或理想情况下,在相同示例Web应用程序的实现或单个功能(例如会话处理或表单)之间进行某种基于事实的性能比较数据处理)等......?
更新:这个问题具体关于不同框架的速度比较,执行相同/等效的任务。我很欣赏良好的意图,但我已经知道速度不是我应该关注的唯一标准。我没有要求提供哲学建议。不管你信不信,作为框架,你实际上可以通过在它们上运行相同目的的任务/代码/应用来比较它们在苹果到苹果的基础上的速度(例如,使用给定的一组模板化插入来呈现给定的形式等等。 。),即使每个框架的完整功能不是100%相同。
答案 0 :(得分:11)
我不想进入解释讨论(对于大多数现实世界的场景,这些开销根本没有影响) - 但这是我的测试:
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](平均值)
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)
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](平均值)
不幸的是,代码太长了,无法在此完整呈现,但Root控制器包含:
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
# Hello World
$c->response->body( 'Hello World' );
}
结果是:
每秒请求数:727.93 [#/ sec](平均值)
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),所以它不会比较普拉克这样的新东西。
答案 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框架。