为什么我不会在新公司中使用 Rails

  • 谢丽

2015 年 9 月 28 日

话题:JavaScriptNode.js语言 & 开发架构

从流量来说,在线文档上传及分享社区Scribd是世界第三大 Rails 站点。Jared Friedman 是该公司的联合创始人兼首席执行官。他从 2006 年就开始使用 Rails,Scribd 第一个版本是用 Rails 0.7 编写的。现如今,Rails 已经成为美国硅谷创业公司默认的 Web 应用程序开发框架。但 Friedman 认为这是个错误,并在近日撰文阐述了这一观点。

Friedman 列出了以下几个方面的原因:

  • Rails 巅峰期已过——Friedman 认为,现在在一家新公司中使用 Rails 就像 2007 年在一家新公司中使用 Java Spring,其依据是谷歌趋势中 Web 框架的搜索量变化,如下图所示:

  • Rails 有个大难题:Ruby——基准测试显示,截至目前,Ruby 是主流编程语言中最慢的。语言设计是一个原因,但更深层次的原因是 Ruby 没有一个大型的企业赞助商。在 2007 年,Python、PHP 及 JavaScript 也都是相当慢的脚本语言。Facebook 对 PHP 进行了巨大的投资,构建了HipHop转译器,提升了 PHP 的运行速度。谷歌则构建了一个快速的 JavaScript JIT 编译器,无意间促成了服务器端 JavaScript 应用的暴增。相比之下,Ruby 解释器仅仅是志愿者的工作成果。在 2007 年到 2012 年之间,有多个项目试图提升 Ruby 的运行速度,如RubiniusJRubyYARV,但只有 JRuby 仍然在积极开发,而且最新的版本让人看到了希望,只是仍然有很长的路要走。此外,Twitter 是第一家基于 Rails 成长起来的大型科技公司,它曾试图优化 Ruby 解释器,但 Twitter 工程师最终还是决定使用一种速度更快的语言重写 Twitter,因为那比让 Ruby 更快来的简单。
  • Rails 开发停滞,其它框架已经赶了上来——Rails 3 于 2010 年 8 月发布,但 GitHub 四年之后才升级到这个版本,因为该版本的新特性没有足够的吸引力。Scribd 在升级到 Rails 3 的过程中也遇到了很大的麻烦,导致他们现在都不确定是否还会升级到 Rails 4。与此形成鲜明对比的是 JavaScript 的快速发展。Scribd 经历了从 Prototype 到 jQuery 到 Coffeescript 到 Angular 再到 React 的转换,每一次转换都能带来生产效率的提升。
  • “新兵训练营(BootCamps)”——过去两年出现了许多编程新兵训练营。当讲授服务器端开发时,他们绝大多数都会讲授 Rails,而不是其它语言。这导致优秀的开发人员,尤其是那些具有计算机科学学位的开发人员看轻那些训练营项目。Friedman 注意到一种趋势,就是有经验的开发人员不想使用 Rails。
  • 有许多新框架成为 Rails 的有力竞争者——Friedman 得出这一结论的一个依据是Coding VCAngelList上广受欢迎的公司所使用的服务器语言的统计分析,如下图所示:

另一个依据是 indeed.com 上的就业趋势统计,如下图所示:

Charles Nutter是 JRuby 的核心开发人员。他评论说:

我讨厌类似这样的文章,用传闻和猜测混淆视听。

因此,他几乎是逐条反驳了 Friedman 的观点,而且言辞颇为激烈。他认为,谷歌趋势并没有给出总数,只能体现一种相对增长,而实际上,Rails 比 Node.js 流行。关于性能,Nutter 指出,在处理相对稳定的 Rails 请求时,JRuby 的性能比CRuby更好。对于“Rails 开发停滞”的观点,Nutter 认为十分荒谬,因为熟悉内情的人都知道,Rails 是发展最快的框架之一。

网友 AnneOminous 在声援 Nutter 的同时指出,Friedman 提到的关于 Twitter 的信息是错误的。Twitter 的其中一名创建者之所以使用 Scala 重写 Twitter 引擎的某些部分,是因为他不擅长 Ruby,未能正确使用。后来的分析也证明,他使用 Scala 所做的工作并不比使用 Ruby 快多少。对于 Friedman 有关 GitHub 的说法,也有网友指出,GitHub 之所以在 Rails 3 发布那么久之后才升级到 Rails 3,是因为他们自己派生了 Rails,使用了许多内部补丁。

总之,对于 Friedman 的观点,反对者居多,但也有少数网友持赞同观点。感兴趣的读者,可以进一步阅读原文评论。


感谢魏星对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

JavaScriptNode.js语言 & 开发架构