gpt4 book ai didi

ruby-on-rails - 为什么 Rails 在启动时预加载它的所有依赖项(gems)?

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:36 24 4
gpt4 key购买 nike

当 Rails 启动时,它会预加载所有依赖项(gems),这会导致启动时间非常缓慢。在我正在处理的一个中型项目中,Rails 的启动时间为 10-15 秒,具体取决于机器。

虽然这在生产中不是问题,但在开发中却是一个巨大的痛苦。特别是在工作 TDD/BDD 时。有加速测试的解决方案(如 spork),但它们会引入自己的问题。

我的问题是:为什么不在每个代码文件中要求所需的依赖项,而不是在启动时预加载所有内容?

手动要求的缺点是什么?额外的代码行?

最佳答案

Rails 不是 PHP。一些资源是自动加载的,但是您可能需要的所有资源都在启动/初始化时加载,因为最好在发出请求之前这样做,这样应用程序就可以准备好而不是根据请求延迟加载它们,从而减慢速度第一个请求。许多这种最后一分钟的方法定义和类加载仍然会发生,将加载时间减少到 仅仅 10-15 秒,但是如果你减少 5-10 秒在那个加载时间中,它只是附加到第一个请求上。不好,对吧?

您遇到的很多加载时间都发生在您添加到项目中的 gems/插件/库中。许多规模庞大的公司都提供了只加载您需要的部分的方法,还有更多的公司可以使用这种优化。例如,如果你有一个不需要 Active Record 的 Rails 项目,你可以替换:

require 'rails/all'

...与:

require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"

...在您的 application.rb 中减少加载(并避免有关数据库不存在的错误)。

关于ruby-on-rails - 为什么 Rails 在启动时预加载它的所有依赖项(gems)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7637889/

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