Mojolicious и Dancer
Если честно, то наболело. Хочу положить конец дискуссии про Mojolicious и Dancer.
Сравнивать эти два фреймворка вообще бессмысленно, поэтому я умышленно не написал в название vs.
- Mojolicious — это не микро-фреймворк, в отличии Dancer, а инструмент для написания современных веб-приложений и не только (хотя автор всё-таки ориентируется на веб).
- Если всё-таки хочется сравнить процесс (особенности) написания небольших веб-приложения, то стоит сравнивать Mojolicious::Lite и Dancer. Но это такое же сравнение, как iPhone и Android, Mac OS X и Windows, Playstation и Xbox соответственно. Любое соперничество идёт на пользу каждому участнику состязания.
- Mojolicious::Lite — это всего лишь вершина айсберга, обёртка над фреймворком Mojolicious. Предназначен для написания небольших простых веб-приложений, а также для обучения Mojolicious и Perl (другими словами — снижает порог вхождения).
- Mojolicious — это одновременно название дистрибутива и название фреймворка, стОит отличать это в контексте разговора.
- Поэтому 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).
- Фреймворк Mojolicious — полноценный веб-фреймворк, с богатым и гибким функционалом (роутеры, хелперы, плагины), подходящий для решения сложных веб-проектов.
- Кроме того, Mojolicious (инструмент, продукт):— без зависимостей (действительно, без зависимостей, всё, что нужно для запуска есть в CORE-библиотеках Perl),— стабильная версия ядра (тут многие могут поспорить, приведя кучу примеров того, что в недавних версиях сломалась совместимость c Mojo::IOLoop, но я повторюсь — основной акцент всё-таки был на веб, и чтобы код был впредь лучше, автор пошёл на конфликты с предыдущими версиями, а код веб-проектов, написанных год назад, работают на последней версии Mojolicious),— есть хорошая документация и вики,— живое и достаточно большое сообщество ("ты совсем не одинок, когда сталкиваешься с проблемой"),— красивый современный сайт, красивый — ключевое слово, меня и большинство сильно отпугивают "страшные" сайты, которые пытаются продвигать какой-либо продукт (я серьёзно, меня просто раздражает дефолтные стили и авто-генерируемые страницы Dancer, серый фон "попахивает" 90ми).— понятные и опять же красивые скринкасты Mojocast (я сравниваю со скринкастом от Габора Жабо про блог, это ужас),— и так далее.
Оценив популярность и тенденции в сообществе языка Perl, могу сделать вывод, что:
- Dancer выбирают программисты: — за 35 лет (если нет, то выглядят на такой возраст),
— сидевшие очень долго под mod_perl или CGI,
— делают совсем небольшое количество проектов, где фреймворком был либо CGI::Application, либо свой велосипед (который уже стал таким крутым, что с ним жалко расставаться и что-либо сделать на нём новое очень сложно или невозможно),
— совсем не могут избавиться от Template Toolkit,
— им кажется, что вот наконец-таки можно избавиться от копипаста в виде my $self = shift; и везде в коде писать DSL (params, database, ..),
— не парятся по поводу серого фона и синих ссылок на своих проектах,
— не видят смысла в социализации интернета и своих разработок,
— думают, что умеют танцевать, но это совсем не так,
— и, наконец, те, кто ненавидят Mojolicious, автора и/или sharifulin :-) - Mojolicious выбирают:— молодые и активные разработчики (если нет, то считающие себя в душе таковыми),
— нет желания (нет времени) сейчас писать свой собственный шаблонизатор, роутер, событийную машины и/или фреймворк,
— попробовавшие раз, и не пытавшиеся обновить на работающем Mojo-проекте дистрибутив Mojolicious, хотя они знали, что не безопасно использовать внутреннее API (например, Mojo::IOLoop, который сильно внутри поменялся несколько месяцев назад),
— доверяющие мнению тех, кто про Mojolicious рассказывает или подписанные на новости sharifulin :-) - С Catalyst очень сложно слезть, хотя у некоторых получается :-)
Прочитав этот список, можно сделать вывод, что начать писать на Dancer сложнее, т.к. больше требований.
Два замечания про скорость и альтернативу в виде Plack.
- В сети есть несколько тестов, где приведены результаты бенчмарков "Hello world"-конструкций, и Mojolicious часто на последних местах. Да это так, но это ничего не меняет:— Mojolicious::Lite — это обёртка над Mojolicious, а тот в свою очередь над Mojo, поэтому в таких тестах Dancer будет выигрывать,— Встроенный в Mojolicious HTTP-сервер (хоть и асинхронный, но однопоточный) написан на Perl и не претендует на высокие показатели производительности или отказоустойчивое решение при больших нагрузках.— Сама суть Mojolicious — в удобстве, скорости разработки и поддержки кода (прикладные задачи), но не подумайте, что на производительность забили, это не так.— Не меняя код, Mojolicious-приложение можно запустить под FastCGI и/или PSGI (starman, starlet) и вы забываете про то, что именно ядро Mojolicious может быть медленным, т.к. вся проблема сводиться к логике, которую вы реализуете.— Любой достаточно популярный сайт, веб-сервис или стартап можно написать на Mojolicious и проблем с производительностью не будет (если, конечно, это не Rambler-почта).
- 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
ЗЫ: Когда я решил написать этот пост, в голове были только жёсткие высказывания и ненормативная лексика, рад что пост получился не таким :-)