Rails必须延迟加载所有内容吗?或者去做



当我注意到像这样的简单方法的规格中有0.15s这样的东西时

class String
  def to_slug
    (self.dup).gsub(/["']/, '').gsub(/@/, 'at').gsub(/&/, 'and').parameterize
  end
end

我开始问自己发生了什么,所以在没有参数化的情况下对方法进行基准测试后,我认为这是参数化内部的问题,不一定是方法本身的问题,但从加载方式来看,在我看来,当像这样的Monkey Patches应该被急切加载时,它似乎是懒加载的,这会导致不应该存在的延迟。所以我的问题是,Rails真的很懒地加载包含parameterize的文件吗?有没有办法说服Rails急于将补丁加载到String和其他stdlib。

config/environments/test.rb中调用config.threadsafe!应强制在启动时加载所有代码。请注意,这会将cache_classes设置为true,因此不要在development环境中使用它,否则将丢失代码重新加载。

另一种方法是更改config.eager_load_paths以包含要加载的目录。

资源:

  • Aaron Patterson在他的文章《删除配置线程安全!》中解释了config.threadsafe!
  • Rails的配置指南中有很多关于每个选项的信息

最新更新