DVK*_*DVK 14 perl performance web-frameworks catalyst embperl
我看过提及(这听起来像未经证实的意见,以及那些过时的意见),Embperl是最快的Perl Web框架.
我想知道是否对主要稳定的Perl Web框架的相对速度达成共识,或者理想情况下,在相同示例Web应用程序的实现或单个功能(例如会话处理或表单数据处理)之间进行某种基于事实的性能比较等等......?
更新:这个问题具体是关于不同框架的速度比较,执行相同/等效的任务.我很欣赏良好的意图,但我已经知道速度并不是我应该关注的唯一标准.我没有要求提供哲学建议.不管你信不信,作为框架,你实际上可以通过在它们上运行相同目的的任务/代码/应用来比较它们在苹果到苹果的基础上的速度(例如,使用给定的一组模板化插入来呈现给定的形式等等. .),即使每个框架的完整功能不是100%相同.
zby*_*zby 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/
Run Code Online (Sandbox Code Playgroud)
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 ...
Run Code Online (Sandbox Code Playgroud)
我得到了类似的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.
Run Code Online (Sandbox Code Playgroud)
结果:每秒请求数:763.72 [#/ sec](平均值)
不幸的是,代码太长了,无法在此完整呈现,但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](平均值)
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](平均值)
添加一些更多功能后,这将更改.
bvr*_*bvr 10
这是perl框架之间的一个比较,在速度(启动)和框架本身消耗的内存方面.这有点旧(2008年),所以它不比较普拉克这样的新东西.
我知道这不会直接回答你,但我不认为存在最新的比较,而且我知道全面的比较不存在.至少需要花费几周时间来完成一个彻底的基准测试,因为现在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应用程序的绝佳搭档.
TechEmpower 对框架性能有一些很好的比较。请参阅http://www.techempower.com/benchmarks/
到目前为止,它们已经包括 4 个 perl 框架(Dancer、Kelp、Mojolicious、Web::Simple)以及许多其他语言的框架。如果需要,可以过滤结果以仅显示 Perl 框架。