И снова Rails vs Django
Предисловие
За несколько лет успешной и не очень работы с различными Web-CMS у меня появилось непреодолимое желание научиться писать веб-проекты на более «высоком» уровне. Хотя технически все же правильнее будет сказать «на более низком». Крайне не хватало для реализации своих идей функционала известных движков. А разбираться в API и исходниках каждого (для написания расширений и модулей) мне показалось слишком муторным.
И тогда мой взгляд упал на веб-фреймворки. Конечно же, на наиболее популярные: Ruby on Rails, Django (Python) и php-шный Symphony. Желание изучать последний отпало почти сразу — когда работал в офисе, от коллеги-программиста, писавшего серверную часть проекта на связке Php+Symphony+Doctrine, слышал слишком много нецензурных слов.
Поэтому принялся гуглить на темы «питон против руби», «рэилс против джанго». И каково же было мое разочарование, когда итогом всех статей и постов на эти темы была фраза: «попробуйте и то и то, а дальше сами решайте»
Я попробовал. И то и то. По чуть-чуть, но с выбором быстро определился. Итак, Rails 3.0 против Django 1.2 по версии начинающего свой путь веб-программиста.
Поехали
Не буду описывать, что из себя представляет каждый фреймворк. Так же не буду сравнивать языки Ruby и Python. Они мне оба понравились. Питон мне показался визуально понятнее, однако после вникания в руби понял, что на нем писать просто быстрее.
Пожалуй, основным мотиватором изучить Rails была новость о появлении третьей версии сего фреймворка. Django же попадается на глаза чуть ли не в каждой новости про рельсы как главная альтернатива.
Начал я с изучения документации. Главным ее источником для Django является официальный сайт проекта, где все очень хорошо и постепенно описано. Официальная документация Rails очень похожа по структуре, только мне показалась менее практичной. Кстати, для обоих фреймворков есть перевод документации на русский (даже для третьей версии рельс, что меня удивило): rusrails.ru и djbook.ru.
Однако, первый увесистый предмет в чаше весов Rails: сайт railstutorial.org. Некто Michael Hartl написал большущий туториал о том, как на Rails 3.0 написать свой твиттер. Это «произведение» я прочитал буквально взахлеб. Для Джанго не нашел ничего подобного, может плохо искал. В книге описано все: от необходимых основ руби до тестирования, развертывания и работы с git. Я вообще рекоммендовал бы книгу Майкла каждому, кто решил взяться за веб-разработку.
Вот тут-то я и стал неравнодушен к Ruby on Rails. Но, стараясь быть непредвзятым, я пошел дальше — начал исследовать историю развития и перспективы языка. В итоге все свелось к чтению Release Notes обоих.
Итак, Rails 3.0:
- Данная версия была слеплена совместно с коммандой разработчиков Merb (другого фреймворка, о котором я ранее слышал очень мало, однако он славился неплохой производительностью), что обещает прирост в скорости исполнения программ
- Изменена работа с запросами к БД (Active Record), ранее Рэилс ругали за данный компонент, пользуясь сторонними решениями.
- Unobstructive JS. Также разработчики ранее хаяли рельсы за повсеместное использование Prototype в качестве ключевой js-библиотеки. Теперь же за пару минут можно легко заменить на любимый jQuery или какой-нибудь MooTools
- Еще одно стоящее обновление. Система контроля расширений, или, так называемых «gem'ов». Буквально вчера необходимо было перенести проект с Windows на MacOS, вот тут-то я и познал рай: встроенный bundler сам скачал и установил все необходимые для проекта плагины. Очень удобно. Насколько мне известно, для django есть что-то подобное в качестве 3rd party, но сырое. Да и из коробки приятнее.
Django же перешел в версии 1.* уже достаточно давно. Поэтому я просто начал искать преимущества перед Rails 3.0.
Встроенная админка с авторизацией. Очень удобная штука, мне дико понравилось. Конечно, будучи неравнодушным к рельсам на столь раннем этапе, я быстро нашел нужным гем: Typus. Но, как я и говорил: «из коробки...»
Почему-то общее впечатление о создании модели данных в джанго у меня лучше. Как-то понятней и проще для меня. Наверное связано с тем, что Питон мне показался более читабельным. Также философия стандартной системы шаблонов мне тоже понравилась. Ничего лишнего, как и нужно дизайнеру. И сочетание {{ smthn }} по мне приятнее чем <%= render smthn %>. Хотя совсем скоро я узнал, что и для рельс и для джанги есть море других темплейт-систем.
Ну и все хвалят связку Python+Django за производительность. Причем даже на стадии разработки заметно — генераторы кода работают значительно быстрее в джанго, нежели в рэилс.
Вот как-то так.
Результаты
Часто «джангисты» мне отвечают на выпады типа «а вот у вас нет bundler'а» фразой «а зато есть плагин!». Я же им в ответ на «у вас нет админки!» отвечаю то же самое. И моя позиция выгоднее. Потому что в Rails подключение плагина происходит одной строчкой:
$ gem install mega-plugin
Наш мега-плагин сам скачается и установится куда нужно! Красота! Для джанго же все это нужно делать ручками. А иногда ручками приходится делать не только «скачать-распаковать-скопировать». Да и какие-то туториалы по плагинам тоже искать постоянно приходится.
Еще с недавних пор я стал приверженцем BDD-философии разработки ПО. Писать же тесты в Cucumber для Rails — одно удовольствие. Можно даже на русском языке! И вообще, как мне показалось, в Rails такому этапу разработки как тестирование уделено гораздо больше внимания.
Еще буквально на днях познал такую вещь как HAML. Еще +5 к скорости разработки.
Думаю, на данный момент ни для кого уже не секрет, что выбрал я Rails 3.0. Честное слово, старался быть максимально объективным. Но так как главным критерием для меня является именно скорость разработки и масштабируемость, я счел данный фреймворк более подходящим.
В чаше весов Rails 3.0 оказались:
- Улучшенная в последней версии производительность. Да и вообще, как кажется, в 3.0 убрали почти все недостатки рельс перед джанго.
- Код на Ruby пишется быстрее, чем на Python, хоть и выглядит запутанней.
- Миграции БД. Ибо чтобы внести изменения в БД в Джанго после изменения модели мне столько всего пришлось проделать… мне это очень не понравилось. Опять же — скорость страдает.
- Бандлер и гемы. Удивительная вещь.
- Туториалы и скринкасты. Даже для 3.0 их уже огромное количество. Уже задумался об авторском переводе railstutorial.org.
- Свободно заменяемые компоненты. Не хочешь ActiveRecord? Легко! Хочется отдать js популярному jQuery? Еще проще.
- Крайне удобное тестирование приложений. RSpec и Cucumber — наши лучшие друзья.
- HAML & Sass
- Бесплатный rails-хостинг Heroku.com, деплоинг на который занимает ровно две команды в терминале.
Резюме
Все что я хотел — как можно быстрее превращать свои идеи в работающие приложения. Получилось это у меня эффективнее именно с Rails. Причем, как мне кажется, если бы я задумался над выбором фреймворка месяца три назад, еще до выхода 3.0, я бы выбрал Джанго. Уж больно Питон симпатичный :)
2 комментария
Python/Django быстрее.
> Код на Ruby пишется быстрее, чем на Python, хоть и выглядит запутанней.
Неправда. Не всегда.
> Миграции
Откройте для себя South
> Бандлер и гемы.
Откройте для себя pip и virtualenv
> Свободно заменяемые компоненты.
В джанге легко можно использовать другой ORM или шаблонизатор, но теряешь админку.
> HAML & Sass
Hamlish и webassets
Джанга ничем не уступает рельсам, а работой с формами оставляет рельсы далеко позади.