Posterous theme by Cory Watilo

Filed under: plack

Mojolicious и Dancer

Если честно, то наболело. Хочу положить конец дискуссии про Mojolicious и Dancer.

Сравнивать эти два фреймворка вообще бессмысленно, поэтому я умышленно не написал в название vs.

  1. Mojolicious — это не микро-фреймворк, в отличии Dancer, а инструмент для написания современных веб-приложений и не только (хотя автор всё-таки ориентируется на веб).
  2. Если всё-таки хочется сравнить процесс (особенности) написания небольших веб-приложения, то стоит сравнивать Mojolicious::Lite и Dancer. Но это такое же сравнение, как iPhone и Android, Mac OS X и Windows, Playstation и Xbox соответственно. Любое соперничество идёт на пользу каждому участнику состязания.
  3. Mojolicious::Lite — это всего лишь вершина айсберга, обёртка над фреймворком Mojolicious. Предназначен для написания небольших простых веб-приложений, а также для обучения Mojolicious и Perl (другими словами — снижает порог вхождения).
  4. Mojolicious — это одновременно название дистрибутива и название фреймворка, стОит отличать это в контексте разговора.
  5. Поэтому Mojolicious (дистрибутив, "веб в коробке") — это

    — набор компонент и иструментов, основные из них: Mojo::Base (создание объектов), Mojo::Log (логирование), Mojo::UserAgent (полноценный HTTP и websocket клиент), Mojo::DOM (работа с DOM), Mojo::JSON (работа с JSON), Mojo::Template (шаблонизатор), Mojo::Util (вспомогательные функции), Mojo::IOLoop (событийная машина), Mojo::Server (CGI, FastCGI, PSGI, HTTP и websocket сервер) и Test::Mojo (автоматизация тестирования),

    — три фреймворка: Mojo (HTTP запрос-ответ сервер), Mojolicious (mVC веб-фреймворк, идея позаимствована у RoR) и Mojolicious::Lite (простой веб-фреймворк, идея позаимствована у sinatra).

  6. Фреймворк Mojolicious — полноценный веб-фреймворк, с богатым и гибким функционалом (роутеры, хелперы, плагины), подходящий для решения сложных веб-проектов.
  7. Кроме того, Mojolicious (инструмент, продукт):

    — без зависимостей (действительно, без зависимостей, всё, что нужно для запуска есть в CORE-библиотеках Perl),

    — стабильная версия ядра (тут многие могут поспорить, приведя кучу примеров того, что в недавних версиях сломалась совместимость c Mojo::IOLoop, но я повторюсь — основной акцент всё-таки был на веб, и чтобы код был впредь лучше, автор пошёл на конфликты с предыдущими версиями, а код веб-проектов, написанных год назад, работают на последней версии Mojolicious),

    — есть хорошая документация и вики,

    — живое и достаточно большое сообщество ("ты совсем не одинок, когда сталкиваешься с проблемой"),

    — красивый современный сайт, красивый — ключевое слово, меня и большинство сильно отпугивают "страшные" сайты, которые пытаются продвигать какой-либо продукт (я серьёзно, меня просто раздражает дефолтные стили и авто-генерируемые страницы Dancer, серый фон "попахивает" 90ми).

    — понятные и опять же красивые скринкасты Mojocast (я сравниваю со скринкастом от Габора Жабо про блог, это ужас),

    — и так далее.

Оценив популярность и тенденции в сообществе языка Perl, могу сделать вывод, что:

  1. Dancer выбирают программисты:

    — за 35 лет (если нет, то выглядят на такой возраст),
    — сидевшие очень долго под mod_perl или CGI,
    — делают совсем небольшое количество проектов, где фреймворком был либо CGI::Application, либо свой велосипед (который уже стал таким крутым, что с ним жалко расставаться и что-либо сделать на нём новое очень сложно или невозможно),
    — совсем не могут избавиться от Template Toolkit,
    — им кажется, что вот наконец-таки можно избавиться от копипаста в виде my $self = shift; и везде в коде писать DSL (params, database, ..),
    — не парятся по поводу серого фона и синих ссылок на своих проектах,
    — не видят смысла в социализации интернета и своих разработок,
    — думают, что умеют танцевать, но это совсем не так,
    — и, наконец, те, кто ненавидят Mojolicious, автора и/или sharifulin :-)

  2. Mojolicious выбирают:

    — молодые и активные разработчики (если нет, то считающие себя в душе таковыми),
    — нет желания (нет времени) сейчас писать свой собственный шаблонизатор, роутер, событийную машины и/или фреймворк,
    — попробовавшие раз, и не пытавшиеся обновить на работающем Mojo-проекте дистрибутив Mojolicious, хотя они знали, что не безопасно использовать внутреннее API (например, Mojo::IOLoop, который сильно внутри поменялся несколько месяцев назад),
    — доверяющие мнению тех, кто про Mojolicious рассказывает или подписанные на новости sharifulin :-)

  3. С Catalyst очень сложно слезть, хотя у некоторых получается :-)


Прочитав этот список, можно сделать вывод, что начать писать на Dancer сложнее, т.к. больше требований.

Два замечания про скорость и альтернативу в виде Plack.

  1. В сети есть несколько тестов, где приведены результаты бенчмарков "Hello world"-конструкций, и Mojolicious часто на последних местах. Да это так, но это ничего не меняет:

    — Mojolicious::Lite — это обёртка над Mojolicious, а тот в свою очередь над Mojo, поэтому в таких тестах Dancer будет выигрывать,

    — Встроенный в Mojolicious HTTP-сервер (хоть и асинхронный, но однопоточный) написан на Perl и не претендует на высокие показатели производительности или отказоустойчивое решение при больших нагрузках.

    — Сама суть Mojolicious — в удобстве, скорости разработки и поддержки кода (прикладные задачи), но не подумайте, что на производительность забили, это не так.

    — Не меняя код, Mojolicious-приложение можно запустить под FastCGI и/или PSGI (starman, starlet) и вы забываете про то, что именно ядро Mojolicious может быть медленным, т.к. вся проблема сводиться к логике, которую вы реализуете.

    — Любой достаточно популярный сайт, веб-сервис или стартап можно написать на Mojolicious и проблем с производительностью не будет (если, конечно, это не Rambler-почта).

  2. Plack/PSGI — отличный инструмент/протокол, который позволил Perl "омолодиться", стать удобным в использование языком. Но это всё-таки кирпичики, из которых самому можно собрать свой фреймворк, который будет заточен под ряд шаблонных задач, работать быстро. Можно попытаться написать пародию на фреймворк Mojolicious или Mojolicious::Lite, получить от этого фан, сделать свой ("правильный") open-source продукт и создать конкуренцию Mojolicious. Это всё хорошо и я рад наличию такой альтернативы.

    Но здесь так же не стОит сравнить Plack с Mojolicious, это разные вещи. Наоборот, Plack (Plack::Middleware) могут дополнять приложения Mojolicious, запущенные под PSGI интерфейсом (понятно, что можно придраться к двойному парсингу запроса, но это не суть).

Если вкратце, то это всё.


use Mojolicious or die;

use Perl or die;

JFDI
 

ЗЫ: Когда я решил написать этот пост, в голове были только жёсткие высказывания и ненормативная лексика, рад что пост получился не таким :-)

 

Perl Oasis

16 января 2010 года в Орландо (штат Флорида, США) прошла конференция Perl Oasis.
Список выступлений.

Мне больше всего интересен доклад японца Миагава о PSGI и Plack.
Очень интересная презентация.

Ну что, будем спамить Google? :)
Perl Web Server

Отчет Миагавы о конференции.

use PSGI or die;

use Perl or die;

JFDI

Original post http://sharifulin.livejournal.com/54641.html