为什么Kernel#require占用了我应用程序资源的很大一部分?

问题描述

| 我正在尝试使用ruby-prof,并将其运行在一个相对独立的模块上。该模块的核心是3个类,可能正在使用其他3个帮助器类。因此,不应有成千上万的需求和内在负担。在安装了很多宝石的大型(gish)应用程序中,这是否正常?
 18.06      7.67     1.99     0.00     7.66     1366  Kernel#require
  5.80      1.21     0.64     0.00     0.83    18704  Array#map
  5.73     10.21     0.63     0.00    10.09    38133  Array#each
  5.17      1.13     0.57     0.00     0.56    21796  Array#include?
  4.40      0.49     0.49     0.00     0.00   345434  Symbol#to_s
  3.78      0.42     0.42     0.00     0.00   446478  String#==
    

解决方法

        根据
ruby-prof
的文档:   要分析Rails应用程序,它是   使用生产来运行它至关重要   设置(缓存类,缓存视图   查找等)。否则,Rail的   依赖加载代码将不堪重负   在应用程序中花费的任何时间   本身(我们的测试表明,Rails   依赖加载导致大约6倍   慢一点)。 您是否使用生产设置运行此程序?如果您不使用缓存的数据,而是每次都必须从磁盘读取文件/类,那么我可以理解为什么您看到系统在ѭ2中花费如此多的时间。     ,        根据您的描述,我在一个类似的案例中运行了ruby-prof,但是我的只需要两个宝石,我认为这不是“一个公数”。话虽如此,我仍然在Kernel#gem_original_require类上花费了我7秒运行时间的10%。 我认为您所看到的是非常典型的,因为它似乎可以与我的案例相提并论。