我需要知道为什么在非生产环境中
eager_load
优先于false
?我听说过的一个论点是,eager_load
急切地将大部分 Rails 和应用程序加载到内存中。因此,使用 eager_load 进行单独测试会使其运行速度变慢。然而,这引发了一些问题,例如在不加载 Rails 和应用程序相关代码的情况下如何运行测试?正在急切加载的 Rails 和应用程序相关代码是什么? config.eager_load_namespaces
提供以下课程:
ActiveSupport
ActionDispatch
ActiveModel
ActionView
ActionController
ActiveRecord
ActionMailer
Jquery::Rails::Engine
MyApp::Application
所有这些类及其子类都被急切加载吗?
在开发或测试环境中使用
eager_load = false
有哪些明显的缺点?
然而,这引发了一些问题,例如如何在不加载 Rails 和应用程序相关代码的情况下运行测试?
测试在尝试使用时按需加载必要的代码。 例如,在某些代码行上,测试想要使用
ActiveRecord
类。当 eager_load
设置为 false
时,这个类还不是必需的,这将导致普通 ruby 程序出现异常。然而,在 Rails 项目中,测试将在使用时按需需要 ActiveRecord
。因此,最终单个测试运行得更快,因为只需要它所需的代码部分。
此技术与急切加载相反,称为 自动加载
正在急切加载的 Rails 和应用程序相关代码是什么?
查看 https://github.com/rails/rails。这是一堆东西。
所有这些类及其子类都被急切加载吗?
是的
在开发或测试环境中使用 eager_load = false 有哪些明显的缺点?
在开发环境中,这是一个优势和最佳实践,因为您可以获得更快的启动时间(在使用像 spring 这样的预加载器时会被忽略)。与
cache_classes=false
选项一起重新加载更改可能也更容易,因为您需要重新加载的内容更少(只是一个假设)。
在测试环境中,有时如果你想估计一些代码指标,你就不能使用
eager_load=false
例如代码覆盖率或进行样式检查。例如。 simple_cov
要求您在开始测试之前预先加载所有代码。
一般情况下,某些库可能无法用于急切加载,因为它在加载类时进行了一些初始化,而该类在调用其方法之前就必须已经可用。然而,这是一个罕见的情况,话虽如此,它发生在我们的
neo4j.rb
gem 身上
预加载使 Rails 在启动时加载所有应用程序,从而增加启动时间。
例如,如果您只想加载 Rails 控制台来检查一个模型的行为,那么您必须等待所有模型、控制器等加载,即使您只想使用其中之一