Ruby VS PHP, Rails VS Zend Framework

Итак, в предыдущей заметке мы создали наше первое приложение. Какие выводы можно из этого сделать? Предлагаю обсуждение, что лучше для веб-разработки Ruby on Rails или Zend Framework. Понимаю, что из этого может вырасти холивар, но мне интересны конкретные аспекты этих фреймворков. И да, будем сравнивать правильно язык с языком (Ruby VS PHP), фреймфорк с фреймворком (Rails VS Zend Framework). Полагаю что результаты можно будет экстраполировать и на другие PHP -фреймворки (Symfony, Koxana, CodeIgniter).
Небольшая легенда: (+) – это преимеущество Rails, (-) – это недостаток, (.) – это хз что такое 🙂
- (+) Rails – MVC-фреймворк, а значит переходящим на него с ZF/Symfony будет легко понять чего где лежит.
- (-) Ruby – интерпретируемый язык, а значит возможны некоторые тормоза.
- (+) В режиме development классы приложения перезагружаются сами при каждом запросе, а значит нам достаточно просто обновить страницу, как в случае с PHP, чтобы увидеть результат. НО в режиме production классы кэшируются и не перзагружаются при каждом запросе. Этого я давно хотел от Zend Framework, потому что иклудить по 250 файлов на каждый запрос – это кошмар и дикие тормоза. Тут работает прямо из коробки.
- (-) Для Ruby на данный момент нет байт-код кэшеров, а для PHP – есть и отлично работают. Запишем это ему в плюсы. Хотя сейчас активно разрабатывается проект Rubinius, который позволяет производить прекомпиляцию кода Ruby, за счёт чего увеличивается производительность. Пока не пробовал его в деле, да и Ruby 1.9 он вроде не поддерживает.
- (+) Rails имеет развитые консольные утилиты. Для Zend’а в принципе тоже есть Zend_Tool, но я если чество им не пользовался.
- (+) ORM. Да, здесь ActiveRecord идет как автоматически устанавливаемый гем, а для ZF придется еще интегрировать Doctrine ORM, т.к. встроенная Zend_Db слишком простая.
- (+) Установка приложение на порядок проще, чем установка PHP приложения. Не надо писать свой инсталлятор, всё уже есть, и зависимости выкачиваются и ставятся автоматически.
- (+) Развертывание приложения – тоже дело пяти минут, при готовой среде. Тестовое приложение Rails я довольно быстро развернул у хостера Heroku. Причем все гемы поставились автоматом, всё само настроилось и запустилось. Я лишь заворожено смотрел на сообщения в консоли. А когда набрал http://netandreus.heroku.com/ обалдел, увидев мое приложение.
- (-) Всё-таки очень трудно найти хостера с рельсами. Пока с этим проблемы, но думаю учитывая скорость его развития будет проще. Но всегда есть возможность взять VDS и сделать там всё, что нужно.
- (.) Масштабируемость. Здесь есть варианты с ПО Mongrel вместо WebRick, mod_passanger для Apache/Nginx и балансировщиком нагрузки. Пока не знаю, не тестил. Кстати, говорят что, ActiveRecord здорово тормозит на большиз базах. Опять же пока не попробуешь – не узнаешь.
- (+) В Ruby качественный ООП, например такой код отлично сработает. 5.month + 10.days Month и Days это методы объектов 5 и 10 O_0
- (+) Возможности метапрограммирования Ruby. Начал изучать эту тему, пока ничего не получилось, но желание поизучать есть огромное. Начал с изучения ActiveSupport.
- (+) Интеграция с языками более низкого уровня. Здесь у руби, как мне кажется, всё гораздо лучше чем у ZF. Я помню опыт создания своей C (именно С, а не C++) библиотеки и её подключения к PHP. Была та ещё работёнка. Руби же сейчас прекрасно работает с Java, (см. проект JRuby), в чём я недавно смог убедиться, скачав приложение Ruboto. По поводу C++ не копал пока, но знаю, что некоторые гемы написаны на сях, а значит такая возможность есть.
- (.) Асинхронное программирование. В Руби есть EventMachine, в PHP – PHPDaemon. Вчера сделал скриптик на EM, и имхо это явно лучше чем node.js
- (-) Руби более сложный язык. Более сложный и гибкий. С одной стороны это плохо, т.к. на первых этапах довольно тяжело обучиться. С другой стороны – это некий порог для быдлокодеров, которые не смогут попасть в ряды разработчиков.
- (-) В Zend_Framework есть классы на все случаи жизни, в рельсах я такого многообразия пока не наблюдаю. Да, есть интересные гемы, но в зенде это всё более целостно и в тоже самое время почти любой класс можно использовать отдельно. Никто не заставляет тебя использовать весь фреймворк – бери только то, что нужно. В рельсах же ты либо на рельсах – либо нет.
- (-) Документация пока оставляет желать лучшего, для Rails 3 очень мало материалов, многие старые команды не работают. Взять хотя бы rails script/generate который теперь выглядит как rails generate и другие. Это конечно прекрасно, что фреймворк развивается, но сложно искать материалы.
- (-) Хотя руби и работает под Windows, но разрабатывать ПО там, как мне кажется, – каторга. Хорошо, что я сижу под Ubuntu 🙂
Если есть мнение, не стесняйтесь – высказывайтесь в комментах!