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

StackOverflow https://stackoverflow.com/questions/4687127

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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 [#/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. Вебнано

zby@zby: ~/progs/скамейка $ 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] (среднее)

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

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

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

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

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

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

Хорошей охоты!

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

У Techempower есть несколько хороших сравнений Framework Performate. Видеть http://www.techempower.com/benchmarks/

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top