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和应用程序相关代码的情况下运行测试?
测试在尝试使用时按需加载必要的代码。 因此,例如在某些代码行上,测试想要使用ActiveRecord
类。 如果将eager_load
设置为false
此类不是必需的,这将导致vanilla ruby程序出现exception。 但是在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控制台以检查一个模型的行为,那么即使您只想使用其中一个模型,也必须等待所有模型,控制器等加载