последние на рельсы против Грааля [закрыт]
Я собираюсь разработать новое веб-приложение, которое будет повторно использовать множество компонентов Java. Для меня очевидными вариантами этого являются Grails или jRuby on Rails, но мне трудно найти объективные сравнения этих двух. Есть ли какие-либо четкие причины для выбора одного из них в отношении:
- простота интеграции с существующими компонентами Java (вне постоянного домена), например JMS, EIP
- поддержка фреймворков функционального тестирования
- производительность на одной машине
- масштабируемость
Я Не ищу ответы, касающиеся доступности разработчиков или активности сообществ.
(я проверил Grails vs Rails , и это не имеет отношения ко мне)
6 ответов:
- простота интеграции с существующими компонентами Java:
С groovy проще, потому что groovy-это в основном java. у вас нет больших контекстных переключателей
- Поддержка фреймворков функционального тестирования
Ruby имеет свою собственную кучу тестовых фреймворков, таких как rspec/shoulda / cucumber / steak и т. д. поскольку мне нравится синтаксис ruby, я бы предпочел эти
- производительность на одной машине
Насколько я знаю, граали лучше в многопоточность, потому что рельсы не слишком фокусировались на этом в прошлом. в настоящее время они догоняют, так что это может быть тай.
- масштабируемость
Оба масштаба с окружающей средой jvm. если у вас есть работающая инфраструктура для java, grails легче интегрировать.
Попробуйте и то, и другое, и выберите язык и среду, которые подходят вам лучше всего. Это правда, что стек Grails из коробки больше подходит для интеграции с Java, но многие компоненты находятся всего в нескольких строках кода Ruby от интеграции с Rails. Rails 3-Отличный релиз, который не требует использования ActiveRecord, на самом деле было бы тривиально использовать Hibernate для ваших моделей. Смотрите также DataMapper, MongoMapper и целый ряд адаптеров баз данных для баз данных SQL и NoSQL похожий.
Также, Джунит != функциональное тестирование. Вместо этого взгляните на Cucumber + Cucumber-Rails + Capybara + Selenium для интегрированного тестирования автоматизации браузера. Взгляните на https://github.com/elabs/front_end_testing для примера приложения, демонстрирующего этот стек.
Я предположу, что Ruby лучше подходит в качестве языка веб-интеграции, и JRuby попадает в сладкое место, делая интеграцию с Java легкой, а также приятной, делая богатство из не-Java библиотек, доступных для вас. Не думайте, что Groovy автоматически выигрывает, потому что он "ближе" к Java. Иногда вам нужно войти в совершенно другую среду, чтобы по-новому взглянуть на то, как решить проблему.
Раскрытие информации: как член команды JRuby, моя предвзятость очевидна в моем ответе.
Я очень хорошо знаю Grails (сейчас я работаю над проектом Grails), но не JRuby, поэтому примите это как, вероятно, предвзятое мнение: глядя на документацию JRuby, кажется, что интеграция JRubys с Java немного более громоздкая, так как Java является более родной в Groovy, чем в Ruby; поэтому в JRuby у вас есть много специфичных для java ключевых слов и методов (например,
java_import
,java_send
). Проще говоря, Groovy-это язык, предназначенный специально для Java-мира, в то время как JRuby-это, ну, Ruby, надетый виртуальная машина Java.Grails имеет встроенные тесты JUnit.
Не могу сказать много о производительности и масштабируемости, но, учитывая хорошую интеграцию с Java, всегда можно написать критически важные для производительности части на Java, когда Groovy слишком медленный.
Надеюсь, это поможет,и в интересах полного раскрытия я являюсь членом команды Grails.
Как сказал фоэт, Grails имеет первоклассную поддержку Spring, поэтому обычно очень легко интегрировать библиотеки Spring - это то, что делают многие плагины, включая плагин JMS.
Код Java может быть либо предоставлен в JARs, либо помещен в каталог src/java проекта. Groovy классы могут ссылаться на классы Java, которые могут ссылаться на Groovy классы. Это довольно гладко.Grails поддерживает HtmlUnit, Selenium-rc и WebDriver через различные плагины. Geb в данный момент представляет большой интерес, особенно в сочетании со Споком.
Проверьте их. Я не знаю, есть ли какие-либо недавние сравнения, но производительность обычно сильно зависит от вашего приложения. http://grails.org/ и http://beta.grails.org/ оба работают на одной машине - и оба являются приложениями Grails.
Насколько я понимаю, довольно легко кластер Граалей с помощью терракоты. Вы также можете сделать это с простым Tomcat, если ты хочешь. Есть варианты распределенного кэширования-SpringSource имеет собственное (коммерческое) предложение в виде GemFire.
В конце концов, вы собираетесь принять решение о личном выборе, комфорте с двумя языками и доступности ресурсов, но в конце концов, тот факт, что Grails основан на Spring, привел меня к выводу, что это был правильный выбор для меня. Я знал, что если все остальное потерпит неудачу, я смогу вернуться к использованию испытанной и истинной пружинной структуры
Для новичков, интересующихся этим вопросом в 2012 году...
" С @CompileStatic производительность Groovy примерно в 1-2 раза медленнее, чем Java, а без Groovy она примерно в 3-5 раз медленнее. (...) Для меня это означает, что Groovy готов к приложениям, производительность которых должна быть в какой-то степени сравнима с Java."
Тест производительности: Groovy 2.0 против Java http://java.dzone.com/articles/groovy-20-performance-compared
И кроме автора, я использовал Заводной с 2008 года с большим успехом, не только для резюме, просто чтобы сделать работу, сделанную в срок бизнес нуждается. Производительность всегда зависит от того, что вы хотите сделать.
Что касается интеграции, Grails действительно "настолько хорош". Мне никогда не нужно было делать еще один шаг, чтобы интегрировать его с существующими библиотеками. Напротив, весенняя природа Граалей делала эту работу еще проще.
Для тех, кто мог бы пожаловаться на микро-бенчмарки и реальные случаи использования, вот несколько старый (Grails 1.8), но хороший вариант с веб-фреймворками (Grails 1.3.7): http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/
Надеюсь, это поможет!
ПС.: Хотелось бы увидеть последние benckmarks с JRuby и еще один очень динамичного JVM-языков.