具有一个大型代码库意味着我们不克不及很常常晋级Rails的版本(我们均匀每两年一次晋级,每次晋级需求1-2周的开辟工夫)。不外每次我们做晋级任务的时分,我最早猎奇的工作之一是,反省分歧版本之间的功能差别。
就我们之前的晋级来讲,在从Rails 2.3 到 Rails 3.0的过程当中,我记载下来的均匀举措变得要慢2倍,一个举措需求的均匀工夫由225ms爬升到480ms。侥幸的是,在这类情境下我们可以拿出一些技能(GC调优),如许我们终极将异样的举措工夫缩减到280ms。即便是完成一些别致的技能,这个工夫依然比Rails 2.3要慢约25%,可是我们曾经可以承受这个后果了。
当我们终极决议由Rails 3.0晋级到3.2,以便与最新的gems兼容的时分,因为我们之前的阅历,可想而知我对功能有多么降落是何等的急迫。依据手头现有数字,看来有需要对此加以了解。这里是前次我描绘到的统一个举措(最多见的举措——显示一个条目标举措)的分歧表示状况,在晋级之前的Rails 3.0上:
在晋级之前最多见的举措,在3小时的工夫窗口中均匀需求301ms
这里是如今的模样:
与前次分歧,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团队看到,对那些基于他们的平台而创立的实践使用来讲,他们的决议计划具有何种现实的影响。假如其别人的阅历与我们类似,那末可以说这是很多人感触感染到的很多的苦楚。
我供认我有点不肯意写这篇文章,由于作为一个平台Rails给了我们太多,并且今朝我们的营业太小,还不至于能间接牵扯到Rails的功能改良。可是我们将持续宣布任何我们发明的、分明的优化战略,宣布到这个博客或许此外甚么地方。
不外我最关怀的,同时也是我宣布此文的缘由是,假如Rails持续以如许的幅度下降速度,我不断定能否在4.x 或 5.x系列版本中,能否会有“没有前往的工夫点”,在那时它将慢到我们没法再做任何晋级。每次我们跟随的新版本都向着那种可能性迈进了一步,即便我们购置了史上最快的Server,而且给编译器完成了史上最耗血汗的优化。
另有人做过由中等范围到大范围webapp的Rails 2 -> 3 -> 4如许的晋级吗?我十分盼望听到你的经历。当Google搜刮“Rails功能”时,只要很少的一点后果,这老是使我想晓得其他开辟者晋级经历的更多细节。
(1)就像在兼容的webServer上运用静态流一样,在某些状况下,新的缓存模子也能够晋升功能。因为这篇文章的目标我是着眼于“功能”,而功能属于在Server上运转的静态web使用顺序范围,这意味着(我们所存眷的是)诸如说明恳求,与数据库交互,和出现呼应。
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协定,假如我们的任务有进犯到您的权益,请实时联络我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务