提高Rails的加载速度

8
这是对以前有关提高Rails控制台加载时间的问题的跟进。
第一个好建议是找出哪些宝石花费太长时间
接下来的答案建议使用:require => nil,并稍后再加载这些宝石
然而,对于一些宝石,如何在不破坏事物的情况下实现此目标并不完全清楚。以下是我们“最大的罪犯”的列表,我想知道是否有人能建议最佳方法仅在必要时加载它们?
require gon: 2.730000 (2.870059)
require omniauth-openid: 1.410000 (1.503858)
require cancan: 2.640000 (2.707467)
require fog: 2.730000 (2.846530)
require activeadmin: 3.650000 (3.923877)

当然还有很多需要花费1秒钟或更少时间的操作,这些也会累积起来...但是至少删除大的操作已经可以改善情况。

如何选择性地延迟加载gem以加快rails加载速度?

1个回答

14

虽然没有直接回答你的问题,但有两件事情你可以尝试:

首先,你是否尝试使用用于1.9.3版本的Falcon补丁?这些补丁包含了一些相当显著的加载时间改进。

如果你正在使用RVM,你可以使用以下命令进行快速简单地安装:

rvm install 1.9.3 --patch falcon -n falcon

其次,确保您设置了GC调整环境变量。Ruby默认分配适合小型脚本的GC参数,但不适用于完整的Rails应用程序。以下是我的设置,但您应根据您的应用程序需求自己确定设置:

% env | grep RUBY_
RUBY_HEAP_MIN_SLOTS=800000
RUBY_HEAP_FREE_MIN=100000
RUBY_HEAP_SLOTS_INCREMENT=300000
RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
RUBY_GC_MALLOC_LIMIT=79000000

使用 Ruby 1.9.3-p286 后我的结果如下:

                    Stock     Stock+GC  Falcon   Falcon+GC
                    27.13     8.43      8.63     6.69
Stock       27.13   100.00%   31.07%    31.81%   24.66%
Stock+GC    8.43    321.83%   100.00%   102.37%  79.36%
Falcon      8.63    314.37%   97.68%    100.00%  77.52%
Falcon+GC   6.69    405.53%   126.01%   129.00%  100.00%

调整GC调优参数有最大的改进效果,但是我们可以通过使用falcon补丁再获得约26%的性能提升。falcon补丁加上GC参数的组合可使启动时间减少超过75%。


哇,谢谢。这看起来非常有前途。我对Ruby/Rails还比较新,但我正在使用编译版本的Ruby,所以必须弄清楚如何编译此补丁,然后尝试调整那些GC参数(我还注意到您包含的链接提到了zeus,听起来也很棒)。希望我能成功,我会回报的。 - gingerlime
这真是太神奇了。Falcon补丁将启动时间从大约50秒降至13秒,然后通过这些GC参数进一步降至约11秒。相当大的提升!希望这个补丁不会破坏任何东西,但除此之外看起来很棒。谢谢!! - gingerlime
p.s. 你是如何生成这些比较结果的? - gingerlime
1
哦,我刚在电子表格里完成了这个。在GDocs中可以看到 - Chris Heald
很棒的写作。如果你不小心,GC确实会让你受到影响。如果你还没有使用Newrelic,可以看一下它;它将检测你的GC传递并显示有多少请求时间被用于GC传递。通过使用类似http://unicorn.bogomips.org/Unicorn/OobGC.html这样的工具,在正常请求周期之外进行垃圾回收,可以提高用户面对的响应时间,从而获得额外的现实世界的好处。 - Chris Heald
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接