3

为了加快我的测试套件的速度,我对其进行了分析并得到了以下信息

Total: 1445 samples
     650  45.0%  45.0%     1171  81.0% Kernel#require
     261  18.1%  63.0%      261  18.1% garbage_collector
     47   3.3%  66.3%      168  11.6% Kernel.load
     39   2.7%  69.0%       82   5.7% Module#class_eval
     27   1.9%  70.9%      817  56.5% ActiveSupport::Dependencies::Loadable#load_dependency
     25   1.7%  72.6%       58   4.0% Enumerable#find
     25   1.7%  74.3%       25   1.7% Module#constants
     20   1.4%  75.7%     1171  81.0% Kernel#gem_original_require
     19   1.3%  77.0%       19   1.3% File.file?
     18   1.2%  78.3%      415  28.7% Kernel.require
 .
 .
 .

从这个答案为什么 Kernel#require 占用了我的应用程序资源的这么大块?这似乎是意料之中的,但我对这里的巨大数字感到非常惊讶。这是真的吗?我们不能做点什么吗?

4

1 回答 1

0

您对此无能为力,因为 require 步骤实际上为您的 Ruby 应用程序构建了 AST - 它是在运行时“构建”的。但是,您需要做的是将您的分析隔离到所有应用程序加载已经完成的位置(例如,对一个操作进行几次空运行,然后才进行分析运行)。这样,您将从基准测试中排除编译步骤。

还要确保您使用的是 1.9.3 而不是 1.9.2,因为已经进行了修复以加快 require。

于 2011-12-13T19:00:11.157 回答