Есть ли сравнение производительности между веб-фреймворками Perl? - PullRequest
14 голосов
/ 14 января 2011

Я видел упоминания (которые звучали как необоснованные мнения и при этом устаревшие), что Embperl является самой быстрой веб-средой Perl.

Мне было интересно, есть ли консенсус относительно относительной скорости основных стабильных веб-фреймворков Perl или, в идеале, какого-то фактического сравнения производительности между реализациями одного и того же примера веб-приложений или отдельными функциями (например, обработка сеанса или форма обработка данных) и т.д ...?

ОБНОВЛЕНИЕ : Этот вопрос , в частности , касается сравнения скорости различных структур, выполняющих идентичные / эквивалентные задачи. Я ценю благие намерения, но я уже знаю , что скорость - не единственный критерий, на который я должен смотреть. Я не просил философских советов. И, верите или нет, будучи фреймворками, вы МОЖЕТЕ сравнивать их скорость по принципу «яблоко-яблоко», выполняя для них задачи / код / ​​приложения одинакового назначения (например, отображать заданную форму с заданным набором шаблонных вставок и т. Д.). .), даже если полная функциональность каждой платформы не на 100% одинакова.

Ответы [ 4 ]

11 голосов
/ 22 января 2011

Я не хочу вдаваться в обсуждение интерпретации (для большинства сценариев реального мира эти накладные расходы никак не влияют) - но вот мои тесты:

1. Plack 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. 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. Catalyst.

К сожалению, код слишком длинный, чтобы быть представленным здесь полностью, но контроллер 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 [# / сек] (среднее значение)

Это изменится после добавления некоторых дополнительных функций.

10 голосов
/ 14 января 2011

Вот одно сравнение между фреймворками perl с точки зрения скорости (запуска) и памяти, используемой самой фреймворком. Он немного стар (2008), поэтому он не сравнивает такие вещи, как Plack.

http://mark.stosberg.com/blog/2008/11/startup-benchmarks-for-mojo-catalyst-titanium-httpengine-and-cgiapplication.html

7 голосов
/ 14 января 2011

Я знаю, что это не отвечает вам напрямую, но я не думаю, что существует современное сравнение, и я знаю, что полное сравнение не существует. Чтобы провести тщательный тест, потребовалось бы, по крайней мере, пару недель работы, потому что в Perl сейчас так много фреймворков с таким большим количеством перестановок БД / Шаблон / Сервер, а различные типы использования приложения могут существенно повлиять на производительность. тоже.

Я верю, что вы будете сильно скучать, если принять простые тесты Марка 2008 года как ответ на свой квест. Развертывание имеет такое же значение, как если бы не скорость веб-платформы. Например, Catalyst не собирается выигрывать необременительную войну за скорость "здравствуй, мир", но видео-приложение BBC Catalyst может обслуживать 1000 одновременных видео. Гибкость, масштабируемость и поддержка различных развертываний становится важным фактором при выборе веб-инфраструктуры.

Plack является новым и основным. Всего за один год это стало массовым внедрением, расширением промежуточного программного обеспечения / плагинов и поддержкой практически всех сред. Механизм Starman для приложений на платах удивительно быстр и поддерживает горячие перезагрузки и увеличение / уменьшение рабочих процессов. Поскольку почти все фреймворки Perl могут работать как .psgi, теперь вы можете запускать что угодно на Starman + nginx (или lighttpd). За последние два года появилось несколько десятков удачных комбинаций развертывания и немало изменений и новых записей в пространстве веб-фреймворка.

Если вы занимаетесь современными веб-технологиями, обязательно выберите комплект с поддержкой веб-сокетов. Одно это значительно увеличит производительность по сравнению с традиционным Ajax; небольшие запросы / ответы могут быть в 100 раз меньше / легче при использовании веб-сокетов.

Sidenote: modperl, вероятно, не является лучшим постоянным развертыванием, которое можно выбрать на данном этапе, если вам не нужны глубокие перехватчики в цикле запросов. Он имеет много предостережений и складок и связывает вас с Apache (отличный сервер, но далеко не самый быстрый вариант).

Удачной охоты!

Обновление от 20 октября 2016 года: uWSGI - фантастическое совпадение для приложений PSGI на Perl.

4 голосов
/ 18 июня 2013

TechEmpower имеет несколько хороших сравнений производительности фреймворка. Смотри http://www.techempower.com/benchmarks/

На данный момент они включают 4 perl frameowkrs (Dancer, Kelp, Mojolicious, Web :: Simple), а также множество фреймворков из других языков. Результаты могут быть отфильтрованы так, чтобы при желании отображались только платформы Perl.

...