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

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

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

обновление: вопрос конкретно о сравнении скорости различных фреймворков, выполняющих одинаковые / эквивалентные задачи. Я ценю ваши добрые намерения, но я ... --5-->уже знаю эта скорость-не единственный критерий, на который я должен смотреть. Я не просил философского совета. И верьте или нет, будучи фреймворками, вы можете фактически сравнить их скорость на основе apple-to-apple, запустив идентично задачи / код / приложения на них (например, рендеринг заданной формы с заданным набором шаблонных вставок и т. д...), даже если полная функциональность каждой платформы не на 100% одинакова.

4 ответов


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

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


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

1. Чистый 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 [#/sec] (среднее значение)

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 [#/sec] (среднее значение)

4. Катализатор.

к сожалению, код слишком длинный, чтобы быть представленным здесь полностью, но корневой контроллер содержит:

sub index :Path :Args(0) {
    my ( $self, $c ) = @_;

    # Hello World
    $c->response->body( 'Hello World' );
}

результат:

запросы в секунду: 727.93 [#/sec] (среднее значение)

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 [#/sec] (mean)

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


Я знаю, что это не отвечает вам напрямую, но я не думаю, что существует современное сравнение, и я знаю, что всеобъемлющее нет. Это займет пару недель работы, по крайней мере, чтобы сделать тщательный тест, потому что есть так много фреймворков в Perl прямо сейчас с таким количеством перестановок DB/Template/Server и различных видов шаблонов использования приложения может сделать основные различия в производительности тоже.

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

Плек новый и крупный. Всего за один год он увидел огромное принятие, middleware / plugin рост и поддержка практически со всех сторон. The Стармена двигатель для приложений plack удивительно быстрый и поддерживает горячие перезагрузки и рабочий процесс приращения/уменьшения. Поскольку почти все фреймворки Perl могут работать как .psgi теперь вы можете запускать все, что хотите, на Starman + nginx (или lighttpd). Есть десятки хороших комбинаций развертывания и довольно много изменений и новых записей в рамках веб-пространства в последние два года.

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

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

счастливой охоты!

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


TechEmpower имеют некоторые хорошие сравнения Performace рамок. См.http://www.techempower.com/benchmarks/

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