我正在寻找开发一个新的 web 应用程序,它将重用很多 Java 组件。对我来说,明显的选择是 Grails 或 jRuby on Rails,但我很难找到两者的客观比较。是否有任何明确的理由在以下方面选择一个而不是另一个:
- 易于与现有 Java 组件(在持久域之外)集成,例如 JMS、EIP
- 支持功能测试框架
- 单机性能
- 可扩展性
我不是在寻找与开发人员的可用性或社区活动有关的答案。
(我已经检查过Grails vs. Rails,它与我无关)
我正在寻找开发一个新的 web 应用程序,它将重用很多 Java 组件。对我来说,明显的选择是 Grails 或 jRuby on Rails,但我很难找到两者的客观比较。是否有任何明确的理由在以下方面选择一个而不是另一个:
我不是在寻找与开发人员的可用性或社区活动有关的答案。
(我已经检查过Grails vs. Rails,它与我无关)
尝试两者,然后选择最适合您的语言和环境。确实,开箱即用的 Grails 堆栈更适合 Java 集成,但许多组件距离与 Rails 的集成只需几行 Ruby 代码。Rails 3 是一个很棒的版本,它不需要您使用 ActiveRecord,事实上,将 Hibernate 用于您的模型将是微不足道的。另请参阅 DataMapper、MongoMapper 以及用于 SQL 和 NoSQL 数据库等的大量数据库适配器。
此外,JUnit != 功能测试。相反,请查看 Cucumber + Cucumber-Rails + Capybara + Selenium 以获得集成的浏览器自动化测试体验。查看https://github.com/elabs/front_end_testing以获取演示此堆栈的示例应用程序。
我建议 Ruby 更适合作为一种 Web 集成语言,而 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 放在 JVM 上的。
Grails 内置了 JUnit 测试。
关于性能和可扩展性不能说太多,但考虑到与 Java 的良好集成,当 Groovy 太慢时,总是可以用 Java 编写性能关键部分。
使用groovy 更容易,因为groovy 基本上是java。你没有大的上下文切换
ruby 有自己的一堆测试框架,比如 rspec/shoulda/cucumber/steak 等等。因为我喜欢 ruby 语法,所以我更喜欢那些
据我所知,grails 在多线程方面做得更好,因为过去 Rails 并没有过多关注这一点。他们目前正在追赶,所以可能是平局。
两者都与 jvm 环境一起扩展。如果你有一个正在运行的 java 基础设施,grails 更容易集成。
正如 phoet 所说,Grails 具有一流的 Spring 支持,因此集成 Spring 库通常非常容易——这就是许多插件所做的,包括 JMS 插件。
Java 代码可以在 JAR 中提供,也可以放在项目的 src/java 目录中。Groovy 类可以引用可以引用 Groovy 类的 Java 类。它非常无缝。
Grails 通过各种插件支持 HtmlUnit、Selenium-rc 和 WebDriver。Geb目前非常感兴趣,尤其是与 Spock 结合时。
测试它们。我不知道最近是否有任何比较,但性能通常在很大程度上取决于您的应用程序。http://grails.org/和http://beta.grails.org/都在一台机器上运行——而且都是 Grails 应用程序。
我认为通过 Terracotta 对 Grails 进行集群非常容易。如果你愿意,你也可以用普通的 Tomcat 来做。分布式缓存有多种选择——SpringSource 有自己的(商业)产品,以 GemFire 的形式。
希望对您有所帮助,并且为了全面披露,我是 Grails 团队的一员。
最后,您将根据个人选择、两种语言的舒适度和资源的可用性做出决定,但最后,Grails 基于 Spring 的事实让我得出结论,这是正确的选择为了我。我知道如果一切都失败了,我可以退回到使用经过验证的真正的 Spring 框架
对于 2012 年对这个问题感兴趣的新人...
“使用@CompileStatic,Groovy 的性能大约比 Java 慢 1-2 倍,而没有 Groovy,它大约慢 3-5 倍。(...)这对我来说意味着 Groovy 已经为性能要求高的应用程序做好了准备在某种程度上可以与 Java 相媲美。”
性能测试:Groovy 2.0 与 Java http://java.dzone.com/articles/groovy-20-performance-compared
除了作者之外,我从 2008 年开始就使用 Groovy 并取得了巨大的成功,不仅是为了 CV,只是为了及时完成业务需要。性能永远与你想做的事情有关。
关于集成,Grails 真的“那么好”。我从来不需要进一步将它与现有库集成。相反,Grails 基于 Spring 的特性使这项工作变得更加容易。
对于那些可能抱怨微基准和实际用例的人,这里有一个有点旧的(Grails 1.8)但很好的 Web 框架(Grails 1.3.7):http ://www.jtict.com/blog/rails- wicket-grails-play-lift-jsp/
希望这可以帮助!
PS.:我想看看 JRuby 和其他真正动态的 JVM 语言最近的基准测试。