- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读了一篇关于 Rails load_paths 的文章,这里是 link .
但是,我仍然对 autoload_paths
和 eager_load_paths
之间的区别感到困惑:
我已经在新创建的 Rails 4 项目中测试了它们。看起来它们的运行方式是相同的,即在开发模式下自动重新加载,但在生产模式下自动重新加载。
最佳答案
此处链接文章的作者。以下是@fkreusch 的回答中试图消除困惑的尝试。
在 Ruby 中,您必须要求每个 .rb
文件才能运行其代码。但是,请注意,在 Rails 中,您从不特别需要 app/
目录中的任何模型、 Controller 或其他文件。这是为什么?这是因为在 Rails 中 app/*
位于 autoload_paths
中。这意味着当您在开发中运行 Rails 应用程序时(例如通过 Rails 控制台),Ruby 实际上还不需要任何模型和 Controller 。 Rails 使用 ruby 的特殊神奇功能来实际等待,直到代码提到一个常量,例如 Book
,然后它才会运行它在以下位置之一找到的 require 'book'
autoload_paths
。这可以让您在开发过程中更快地启动控制台和服务器,因为只有在代码实际需要时,启动时才不需要任何东西。
现在,这种行为有利于本地发展,但是生产呢?想象一下,在生产中,您的服务器执行相同类型的神奇恒定加载(自动加载)。这实际上并不是世界末日,您在生产环境中启动服务器,人们开始浏览您的页面的速度会稍微慢一些,因为某些文件需要自动加载。是的,当服务器“预热”时,这几个初始请求的速度会变慢,但情况并没有那么糟糕。不过,这并不是故事的结局。
如果您在 ruby 1.9.x 上运行(如果我没记错的话),那么像这样的自动请求文件不是线程安全的。因此,如果您使用像 puma 这样的服务器,您将会遇到问题。即使您没有使用多线程服务器,您仍然最好在启动时“主动”要求整个应用程序。这意味着在生产中,您希望在启动应用程序时完全需要每个模型、每个 Controller 等,并且您不介意较长的启动时间。这称为急切加载。所有 ruby 文件都会被急切地加载,明白吗?但是,如果您的 Rails 应用程序没有一个 require
语句,您该如何做到这一点呢?这就是 eager_load_paths
发挥作用的地方。无论您在其中放入什么,在生产环境启动时都将需要这些路径下所有目录中的所有文件。希望这能解决问题。
需要注意的是,eager_load_paths
在开发环境中并不活跃,因此您放入其中的任何内容都不会在开发中立即需要,只会在生产中需要。
还需要注意的是,仅将某些内容放入 autoload_paths
中不会使其在生产中急切加载。很遗憾。您还必须将其显式放入 eager_load_paths
中。
另一个有趣的怪癖是,在每个 Rails 应用程序中,app/
下的所有目录都会自动位于 autoload_paths
和 eager_load_paths
中,这意味着添加那里的目录不需要进一步的操作。
关于ruby-on-rails - Rails 4 中的 autoload_paths 与 eager_load_paths 令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773266/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!