Ruby on rails 什么';这是渴望的影响吗?

Ruby on rails 什么';这是渴望的影响吗?,ruby-on-rails,Ruby On Rails,我需要知道为什么在非生产环境中,eager\u load首选为false?我听说过的一个论点是,eager\u loadeager在内存中加载大部分Rails和应用程序。因此,对单个测试使用eager_load会使其运行较慢。然而,这会引发一些问题,比如在不加载Rails和应用程序相关代码的情况下,测试如何运行?正在加载的Rails和应用程序相关代码是什么config.eager\u load\u名称空间提供以下类: 主动支持 行动调度 活动模型 ActionView 动作控制器 活动记录 A

我需要知道为什么在非生产环境中,
eager\u load
首选为
false
?我听说过的一个论点是,
eager\u load
eager在内存中加载大部分Rails和应用程序。因此,对单个测试使用eager_load会使其运行较慢。然而,这会引发一些问题,比如在不加载Rails和应用程序相关代码的情况下,测试如何运行?正在加载的Rails和应用程序相关代码是什么
config.eager\u load\u名称空间
提供以下类:


主动支持
行动调度
活动模型
ActionView
动作控制器
活动记录
ActionMailer
Jquery::Rails::Engine
MyApp::应用程序

是否所有这些类及其子类都已加载


在开发或测试环境中使用
eager\u load=false
的明显缺点是什么?

eager load使rails在启动时加载所有应用程序,从而增加启动时间

例如,如果您只想加载rails控制台来检查一个模型的行为,那么您必须等待所有模型、控制器等加载,即使您只想使用其中一个

然而,这会引发一些问题,比如在不加载Rails和应用程序相关代码的情况下,测试如何运行

测试在尝试使用时按需加载必要的代码。 例如,在某个代码行上,测试想要使用
ActiveRecord
类。当
eager\u load
设置为
false
时,该类还不是必需的,这将导致vanilla ruby程序出现异常。然而,在rails项目中,测试将需要
ActiveRecord
随需应变。因此,最终单个测试运行得更快,因为只需要它所需的代码部分

这种技术与即时加载相反,称为

正在加载的Rails和应用程序相关代码是什么

退房。这是一堆东西

是否所有这些类及其子类都已加载

在开发或测试环境中使用eager_load=false的明显缺点是什么

在开发环境中,这是一个优势和最佳实践,因为您可以获得更快的启动时间(在使用spring之类的预加载程序时被忽略)。使用
cache\u classes=false
选项重新加载更改可能更容易,因为您需要重新加载的内容更少(只是一个假设)

在测试环境中,如果您想估计一些代码度量,有时就不能使用
eager\u load=false
比如代码覆盖率或样式检查。例如,
simple\u cov
要求您在开始测试之前加载所有代码


通常情况下,一些库不能用于即时加载,因为它在加载一个类时进行了一些初始化,而这个类必须在调用其方法之前就已经可用。然而,这是一个罕见的案例,尽管如此,它发生在我们的
neo4j.rb
gem

中,这是正确的,但是它并没有完全解决作者的问题。Ruby的自动加载与开发中的应用程序代码是完全不同的(尽管它用于框架代码)我应该提到test.rb中的加载导致我们的测试套件覆盖率从75.xx%跃升到83.xx%。事实证明,simplecov还考虑了在加载文件(如读取类和方法定义)时运行的代码。