拥有一个大型代码库意味着我们不能很经常升级Rails的版本(我们平均每两年一次升级,每次升级需要1-2周的开发时间)。不过每次我们做升级工作的时候,我最先好奇的事情之一是,检查不同版本之间的性能差异。
就我们之前的升级来说,在从Rails 2.3 到 Rails 3.0的过程中,我记录下来的平均动作变得要慢2倍,一个动作需要的平均时间由225ms攀升到480ms。幸运的是,在这种情境下我们可以拿出一些技巧(GC调优),这样我们最终将同样的动作时间缩减到280ms。即使是实现一些新奇的技巧,这个时间仍然比Rails 2.3要慢约25%,但是我们已经可以接受这个结果了。
与上次不同,3.2的问题在于,我们再也没有办法凭空捏造更多的技巧。我们已经升级到最新最伟大的Ruby 2.0版本。在请求期间我们已经禁止了GC(感谢有Passenger!)。我们完成这些升级以后,Rails 3.0的应用速度快了大约25%。但是现在由于Rails 3.2中我们需要承受控制器与视图渲染的40%性能下降,这些性能提升被遮蔽了,而且在做Ruby优化以前,反而比3.0中的速度还要慢。
总而言之,如果你有基于Rails的大型应用,此刻你可能已经懂得对Rails新版本心存畏惧。我完全理解那些为 Rails LTS交钱的人。(译注:LTS即 Long Term Support)如果我们不需要与新的gems兼容,仍然使用2.3,这将使我们比Rails 3.0速度快100%,相应的比Rails 3.2速度快40%。
新版的Rails 鼓吹各种改进,像“创建单页web应用的能力”、“更严格的默认安全性”以及“改革,简化”其组成库。我们看到的最近一次的性能提升,是3.2版本使开发环境的加载加快了(1)。这显然是一个令人难以置信的提升(使平均的开发页加载由5秒以上缩减到1-2秒),尽管由于active_reload,我们已经在Rails 3.0有这样的性能提升。
我觉得在驱动Rails开发的各种要素中,现在性能已经成为最不被关注的一个了,如果真是如此,那么这是令人相当羞愧的。如果Rails也像它所做的“改革,简化”一样,花同等的时间分析/改进性能,很难相信每次版本升级我们会承受40%-100%的性能退化。或许与New Relic的合作可以帮助Rails团队看到,对那些基于他们的平台而创建的实际应用来说,他们的决策具有何种现实的影响。如果其他人的经历与我们相似,那么可以说这是许多人感受到的许多的痛苦。
评论删除后,数据将无法恢复
评论(2)
https://news.ycombinator.com/item?id=6805588