我需要知道为什么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宝石
| 归档时间: |
|
| 查看次数: |
4186 次 |
| 最近记录: |