Ответ 1
Вот одно сравнение между каркасами perl, с точки зрения скорости (запуска) и памяти, потребляемой самой картой. Это немного устарело (2008), поэтому он не сравнивает новые вещи, такие как Plack.
Я видел упоминания (которые звучали как необоснованные мнения и датированные тем), что Embperl является самой быстрой веб-картой Perl.
Мне было интересно, существует ли консенсус относительно относительной скорости основных стабильных веб-фреймворков Perl или, в идеале, каких-то сопоставлений производительности на основе фактов между реализациями одних и тех же примеров webapps или отдельных функциональных возможностей (например, обработка сеанса или форма обработка данных) и т.д.??
ОБНОВЛЕНИЕ. Этот вопрос специально посвящен сопоставлению скорости различных фреймворков, выполняя идентичные/эквивалентные задачи. Я ценю хорошие намерения, но я уже знаю, что скорость - это не единственный критерий, на который я должен смотреть. Я не просил философских советов. И верьте этому или нет, будучи каркасами, вы МОЖЕТЕ реально сравнить свою скорость на основе "яблоко-яблоко", запустив на них одинаково предназначенные задачи/код/приложения (например, визуализируйте данную форму с заданным набором шаблонных вставок и т.д.)..), даже если полная функциональность каждого фреймворка не равна 100%.
Вот одно сравнение между каркасами perl, с точки зрения скорости (запуска) и памяти, потребляемой самой картой. Это немного устарело (2008), поэтому он не сравнивает новые вещи, такие как Plack.
Я не хочу входить в дискуссию по интерпретации (для большинства сценариев реального мира эти накладные расходы вообще не влияют), но вот мои тесты:
[email protected]:~/progs/bench$ cat app.psgi
sub {
my ( $env ) = @_;
return [
200,
[ 'Content-Type' => 'text/text' ],
[ 'Hello World' ]
];
}
[email protected]:~/progs/bench$ plackup
HTTP::Server::PSGI: Accepting connections at http://0:5000/
С простыми ab -n 10000
я получаю
Запросов в секунду: 2168.05 [#/sec] (среднее)
[email protected]:~/progs/bench$ cat dancer.pl
#!/usr/bin/perl
use Dancer;
get '/' => sub {
return "Why, hello there";
};
dance;
[email protected]:~/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)
[email protected]:~/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;
[email protected]:~/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 [#/сек] (среднее)
К сожалению, код слишком длинный, чтобы быть представленным здесь целиком, но контроллер 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;
[email protected]:~/progs/bench$ plackup webnano.psgi
HTTP::Server::PSGI: Accepting connections at http://0:5000/
И результат:
Запросов в секунду: 1884.54 [#/sec] (средний)
Это изменится после добавления еще нескольких функций.
Я знаю, что это не отвечает вам напрямую, но я не думаю, что существует современное сравнение, и я знаю, что всеобъемлющего нет. По крайней мере, потребуется несколько недель работы, чтобы сделать тщательный тест, потому что сейчас очень много фреймворков в Perl с таким количеством перестановок DB/Template/Server и различными типами использования приложения могут иметь значительные отличия в производительности тоже.
Я действительно считаю, что вам не хватит многого, взяв Mark простые тесты 2008 года как ответ на ваш квест. Развертывание имеет значение, если не больше, чем веб-среда для скорости. Например, Catalyst не собирается выигрывать сырую скорость "привет мир", но приложение BBC Video Catalyst может обслуживать 1000 одновременных видео. Гибкость, масштабируемость и поддержка различных развертываний становятся важным фактором при выборе веб-инфраструктуры.
Plack является новым и значительным. Всего за один год он увидел огромное внедрение, промежуточное ПО/расширение плагинов и поддержку практически из всех фреймворков. Starman движок для приложений plack является неожиданно быстрым и поддерживает горячие перезагрузки и увеличение/уменьшение рабочего процесса. Поскольку почти все каркасы Perl могут работать как .psgi, теперь вы можете запускать все, что хотите, на Starman + nginx (или lighttpd). В последние два года существует множество полезных комбинаций развертывания и немало изменений и новых записей в веб-пространстве.
Если вы делаете современные веб-материалы, обязательно выберите комплект с поддержкой websocket. Это само по себе значительно увеличит производительность по сравнению с традиционными Ajax; небольшие запросы/ответы могут быть в 100 раз меньше/легче с помощью websockets.
Sidenote: modperl, вероятно, не является лучшим постоянным развертыванием для выбора в этот момент, если у вас нет необходимости в глубоких перехватах в цикле запросов. У этого есть много предостережений и морщин и связывает Вас с apache (отличный сервер, но не самый быстрый вариант длинным выстрелом).
Счастливая охота!
Обновление 20 октября 2016 года: uWSGI - это фантастическое соответствие для приложений PSGI на Perl.
TechEmpower имеет несколько хороших сравнений каркаса. См. http://www.techempower.com/benchmarks/
В настоящее время они включают 4 perl фэноукра (Dancer, Kelp, Mojolicious, Web:: Simple), а также множество фреймворков с других языков. Результаты могут быть отфильтрованы, чтобы при необходимости отображать только каркасы Perl.