gpt4 book ai didi

ruby-on-rails - eager_load=true 有什么影响?

转载 作者:行者123 更新时间:2023-12-03 23:54:53 24 4
gpt4 key购买 nike

我需要知道为什么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 的明显缺点是什么?在开发或测试环境中?

最佳答案

However this raises some questions like how does a test run without loading Rails and application related code?



测试在尝试使用它时按需加载必要的代码。
因此,例如在某些代码行上,测试想要使用 ActiveRecord类(class)。与 eager_load设置为 false这个类还不是必需的,这将导致 vanilla 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要求您在开始测试之前预先加载所有代码。

通常,某些库可能无法与预先加载一起使用,因为它在加载一个类时进行了一些初始化,该类甚至在调用其方法之前就必须已经可用。然而,这是一种罕见的情况,话虽如此,它发生在我们身上, neo4j.rb gem

关于ruby-on-rails - eager_load=true 有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com