eager_load=true 有什么影响?
What's the impact of eager_load=true?
我想知道为什么在非生产环境中 eager_load
比 false
更受欢迎?我听说过的一个论点是 eager_load
eager 加载大部分 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 在启动时加载您的所有应用,这会增加启动时间。
例如,如果您只想加载 rails 控制台来检查一个模型的行为,那么您必须等待所有模型、控制器等加载,即使您只想使用其中之一
However this raises some questions like how does a test run without loading Rails and application related code?
测试在尝试使用时按需加载必要的代码。
因此,例如在某些代码行上,测试要使用 ActiveRecord
class。 eager_load
设置为 false
这个 class 还不是必需的,这将导致普通 ruby 程序出现异常。然而,在 rails 项目中,测试在使用它时将需要 ActiveRecord
按需。所以最后单个测试运行得更快,因为只需要它需要的代码部分。
此技术与预先加载相反,称为 autoloading
What is the Rails and application related code that is being eager loaded?
查看 https://github.com/rails/rails。一堆东西。
Are all of these classes and their subclasses being eager loaded?
是
What are the clear disadvantages of using eager_load = false in development or testing environment?
在开发环境中,这是一个优势和最佳实践,因为您可以获得更快的启动时间(在使用像 spring 这样的预加载器时被忽略)。重新加载更改以及 cache_classes=false
选项可能也更容易,因为您需要重新加载的东西更少(只是一个假设)。
在测试环境中,如果你想估计一些代码指标,有时你不能使用 eager_load=false
比如代码覆盖或做风格检查。例如。 simple_cov
要求您在开始测试之前先加载所有代码。
而且通常情况下,某些库可能无法与预先加载一起使用,因为它在加载 class 时进行了一些初始化,该 class 甚至在调用其方法之前就必须已经可用。然而,这是一种罕见的情况,话虽如此,它发生在我们身上 neo4j.rb
gem
我想知道为什么在非生产环境中 eager_load
比 false
更受欢迎?我听说过的一个论点是 eager_load
eager 加载大部分 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 在启动时加载您的所有应用,这会增加启动时间。
例如,如果您只想加载 rails 控制台来检查一个模型的行为,那么您必须等待所有模型、控制器等加载,即使您只想使用其中之一
However this raises some questions like how does a test run without loading Rails and application related code?
测试在尝试使用时按需加载必要的代码。
因此,例如在某些代码行上,测试要使用 ActiveRecord
class。 eager_load
设置为 false
这个 class 还不是必需的,这将导致普通 ruby 程序出现异常。然而,在 rails 项目中,测试在使用它时将需要 ActiveRecord
按需。所以最后单个测试运行得更快,因为只需要它需要的代码部分。
此技术与预先加载相反,称为 autoloading
What is the Rails and application related code that is being eager loaded?
查看 https://github.com/rails/rails。一堆东西。
Are all of these classes and their subclasses being eager loaded?
是
What are the clear disadvantages of using eager_load = false in development or testing environment?
在开发环境中,这是一个优势和最佳实践,因为您可以获得更快的启动时间(在使用像 spring 这样的预加载器时被忽略)。重新加载更改以及 cache_classes=false
选项可能也更容易,因为您需要重新加载的东西更少(只是一个假设)。
在测试环境中,如果你想估计一些代码指标,有时你不能使用 eager_load=false
比如代码覆盖或做风格检查。例如。 simple_cov
要求您在开始测试之前先加载所有代码。
而且通常情况下,某些库可能无法与预先加载一起使用,因为它在加载 class 时进行了一些初始化,该 class 甚至在调用其方法之前就必须已经可用。然而,这是一种罕见的情况,话虽如此,它发生在我们身上 neo4j.rb
gem