Есть ли сравнение производительности между веб-фреймворками Perl?
Я видел упоминания (которые звучали как необоснованные мнения и при этом устаревшие), что Embperl - самая быстрая веб-среда Perl.
Мне было интересно, есть ли консенсус относительно относительной скорости основных стабильных веб-фреймворков Perl или, в идеале, какого-то фактического сравнения производительности между реализациями одного и того же примера веб-приложений или отдельными функциями (например, обработка сеанса или обработка данных формы), так далее...?
ОБНОВЛЕНИЕ: Этот вопрос конкретно о скорости сравнения различных структур, выполняя идентичные / эквивалентные задачи. Я ценю благие намерения, но я уже знаю, что скорость - не единственный критерий, на который я должен смотреть. Я не просил философских советов. И, верите или нет, будучи фреймворками, вы МОЖЕТЕ сравнивать их скорость по принципу "яблоко-яблоко", выполняя для них одинаковые задачи / код / приложения (например, визуализировать заданную форму с заданным набором шаблонных вставок и т. Д.)..), даже если полная функциональность каждой платформы не на 100% одинакова.
4 ответа
Вот одно сравнение между фреймворками Perl с точки зрения скорости (запуска) и памяти, используемой самой фреймворком. Он немного стар (2008), поэтому он не сравнивает такие вещи, как Plack.
Я не хочу вдаваться в обсуждение интерпретации (для большинства реальных сценариев эти накладные расходы никак не влияют), но вот мои тесты:
1. Чистый мешочек
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. Mojolicious::Lite
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. Катализатор.
К сожалению, код слишком длинный, чтобы быть представленным здесь полностью, но контроллер Root содержит:
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
# Hello World
$c->response->body( 'Hello World' );
}
Результат:
Запросов в секунду: 727,93 [#/ сек] (среднее значение)
5. WebNano
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 [#/ сек] (среднее значение)
Это изменится после добавления некоторых дополнительных функций.
Я знаю, что это не отвечает вам напрямую, но я не думаю, что существует современное сравнение, и я знаю, что полное сравнение не существует. Чтобы провести тщательный тест, потребовалось бы, по крайней мере, пару недель работы, потому что в Perl сейчас так много фреймворков с таким большим количеством перестановок БД / Шаблон / Сервер, а различные типы использования приложения могут привести к значительным различиям в производительности. тоже.
Я верю, что вам будет не хватать, если принять простые тесты Марка в качестве ответа на ваш квест. Развертывание имеет такое же значение, как если бы не скорость веб-платформы. Например, Catalyst не собирается выигрывать необременительную войну за скорость "здравствуй, мир", но видео-приложение BBC Catalyst может обслуживать 1000 одновременных видео. Гибкость, масштабируемость и поддержка различных развертываний становится важным фактором при выборе веб-инфраструктуры.
Плэк новый и главный. Всего за один год это стало массовым внедрением, ростом промежуточного программного обеспечения / плагинов и поддержкой практически всех сред. Движок Starman для приложений на платах удивительно быстр и поддерживает горячие перезагрузки и увеличение / уменьшение рабочих процессов. Поскольку почти все фреймворки Perl могут работать как.psgi, теперь вы можете запускать что угодно на Starman + nginx (или lighttpd). За последние два года появилось множество удачных комбинаций развертывания, а также немало изменений и новых записей в пространстве веб-фреймворка.
Если вы занимаетесь современными веб-технологиями, обязательно выберите комплект с поддержкой веб-сокетов. Одно это значительно увеличит производительность по сравнению с традиционным Ajax; небольшие запросы / ответы могут быть в 100 раз меньше / легче при использовании веб-сокетов.
Sidenote: modperl, вероятно, не является лучшим постоянным развертыванием, которое можно выбрать на данном этапе, если вам не нужны глубокие зацепки в цикле запросов. Он имеет много предостережений и морщин и связывает вас с Apache (отличный сервер, но не самый быстрый вариант в долгосрочной перспективе).
Хорошей охоты!
Обновление от 20 октября 2016: uWSGI - фантастический матч для приложений PSGI в Perl.
У TechEmpower есть несколько хороших сравнений производительности фреймворка. Смотрите http://www.techempower.com/benchmarks/
На данный момент они включают 4 perl frameowkrs (Dancer, Kelp, Mojolicious, Web::Simple), а также множество фреймворков из других языков. Результаты могут быть отфильтрованы, чтобы показать только Perl-фреймворки, если это необходимо.