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 加载更快?

4

1 回答 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% 以上。

于 2012-10-27T20:05:03.030 回答