我想尝试一下 JRuby 和 JRuby on Rails。我无法找到有关 JRuby on Rails 和 Ruby on Rails 之间差异的信息。
我需要注意哪些差异?
JRuby 是在 JVM 上运行的 Ruby 实现,而 Matz 的 Ruby 是 C 实现。
需要注意的主要特点是:
JRuby wiki 中列出了其他差异:
我很惊讶这个问题的所有答案都遗漏了与 GIL 相关的关键内容。
您应该关心的主要区别,尤其是。在 Web 应用程序(例如使用 Rails 构建的应用程序)中,它是真正的并发(“全局解释器锁”免费)。当使用 JRuby 运行两个线程(例如,服务 2 个用户请求)时,它们能够在单个进程中同时运行,而在 MRI 中,GIL(即使使用 1.9 的本机线程)可以避免并行执行 Ruby 代码。
对于应用程序开发人员来说,这是在考虑 JRuby 时要记住的第一件事,因为它确实非常出色
config.threadsafe!
,但要求您确保您的代码(和您的 gems 代码)“真正”线程安全。
我可能是错的,但我认为你可以用普通 RoR 无法做到的方式打包 JRuby on Rails 应用程序 - 看看 Mingle 或类似的。可以在不脱裤子/打开菰的情况下进行销售。
也就是说,我对 RoR 封装还不够熟悉,所以不要让我坚持:)
大多数情况下它的工作原理应该是相同的。在 jRoR 中,您可以访问 RoR 中没有的内容。通常主要是部署问题。
但是,如果您的 RoR 应用程序使用的本机库没有在 JVM 上运行的等效库,那么这可能会很痛苦。然而,大多数库都有一个非本机版本可用(至少是我遇到过的流行版本)。
这里已经有一些很好的答案。
eebbesen 已经介绍了基础知识,并且 kares(他本人!)告诉我们 JRuby 没有 GIL。
我将从更实际的角度补充一下,我在 Ruby on Rails 上启动了应用程序,然后出于性能原因迁移到 JRuby。
有两个主要的性能优势:在某些情况下,JRuby(或曾经)比 Ruby 更快,第二,缺少卡雷斯提到的全局解释器锁,使我能够进行多线程处理,这虽然很棘手,但解锁了数量级的性能好处。
一个非常大的 Ruby on Rails 应用程序在一个小时内移植并运行,一切顺利。唯一实际的问题是 Java 的正则表达式与 Ruby 的略有不同。对于 JRuby 来说,这是一项巨大的成就。
JRuby 与常规 Ruby 编程语言之间的主要区别在于,JRuby 使用 Java 虚拟机 (JVM) 而不是传统的 Ruby 虚拟机。这使得 JRuby 可以在任何支持 Java 运行时环境的平台上运行。这可以包括 Windows、Mac、Linux 和其他支持 Java 的平台。
JRuby 具有一些独特的优点,因为它与所有现有的 Java 库和其他技术无缝集成,这在某些情况下(例如线程)可能是一个很大的优势。在某些情况下它也更快。
但是一切都取决于您的项目,如果您有 JAVA 后端/大量线程需求,那么 Jruby 很好,否则就选择 Ruby。 (注:Ruby比JRUBY有更好的支持)