- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在查看 active_support.rb
以尝试了解它使用的加载过程。它使用三种加载方法:load_all!
、autoload
和require
。为什么在同一个文件中使用三种不同的加载方式?
module ActiveSupport
def self.load_all!
[Dependencies, Deprecation, Gzip, MessageVerifier, Multibyte, SecureRandom, TimeWithZone]
end
autoload :BacktraceCleaner, 'active_support/backtrace_cleaner'
autoload :Base64, 'active_support/base64'
autoload :BasicObject, 'active_support/basic_object'
autoload :BufferedLogger, 'active_support/buffered_logger'
autoload :Cache, 'active_support/cache'
autoload :Callbacks, 'active_support/callbacks'
autoload :Deprecation, 'active_support/deprecation'
autoload :Duration, 'active_support/duration'
autoload :Gzip, 'active_support/gzip'
autoload :Inflector, 'active_support/inflector'
autoload :Memoizable, 'active_support/memoizable'
autoload :MessageEncryptor, 'active_support/message_encryptor'
autoload :MessageVerifier, 'active_support/message_verifier'
autoload :Multibyte, 'active_support/multibyte'
autoload :OptionMerger, 'active_support/option_merger'
autoload :OrderedHash, 'active_support/ordered_hash'
autoload :OrderedOptions, 'active_support/ordered_options'
autoload :Rescuable, 'active_support/rescuable'
autoload :SecureRandom, 'active_support/secure_random'
autoload :StringInquirer, 'active_support/string_inquirer'
autoload :TimeWithZone, 'active_support/time_with_zone'
autoload :TimeZone, 'active_support/values/time_zone'
autoload :XmlMini, 'active_support/xml_mini'
end
require 'active_support/vendor'
require 'active_support/core_ext'
require 'active_support/dependencies'
require 'active_support/json'
I18n.load_path << "#{File.dirname(__FILE__)}/active_support/locale/en.yml"
最佳答案
我不太清楚为什么 Rails 使用三种不同的加载方法(实际上是两种 - 见下文)。但总的来说,我知道为什么有人会这样做。
Require
表示“立即加载”。 autoload
意思是“当你需要使用它的时候加载它”。使用两者的通常原因是您有一些文件,您几乎认为这些文件将在每个程序调用中使用;和其他可选的。例如,在不使用弃用方法的 Rails 应用程序中,您永远不需要 Deprecation
;那么为什么要通过加载该文件来减慢初始设置的速度呢?
在其他情况下,您可能会区分程序执行早期需要的文件和可以等待的文件。例如,在第一个请求到来之前,您不太可能需要 Gzip
。因此,通过使用自动加载,您可以缩短初始设置的一些时间,但代价是第一个请求会略微变慢请求。
您可能会问,为什么不对所有内容都使用 autoload
呢?为什么要在绝对需要之前加载任何?原因之一是自动加载仅适用于常量。因此,例如,active_support/core_ext
向 Numeric 添加了一堆方法,因此您可以编写类似 3.days
、6.minutes
的代码,和 16.seconds.ago
。 3.days
中没有常量,因此您无法触发该表达式的自动加载。 (并且您不能自动加载 Numeric
,因为基类已经加载 - 它只是您要添加的扩展。)
最后,这个类实际上并没有使用三种加载方法;它使用两个,并提供一个(某种)。 load_all!
被 Rails::Initializer
用来
# Preload all frameworks specified by the Configuration#frameworks.
# Used by Passenger to ensure everything's loaded before forking and
# to avoid autoload race conditions in JRuby.
我不知道细节,也不知道为什么要预加载这些特定模块(而不是其他模块)。但由于这是为了支持特定环境,您会明白为什么它可能需要与默认加载机制分开的代码。
关于ruby-on-rails - 为什么都是autoload,load_all!并要求全部用于 active_support.rb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1012523/
Kernel#autoload 和 Module#autoload 有什么区别?每个使用的上下文是什么? 最佳答案 正如标准文档中这些方法的源代码所示, Kernel#autoload 电话 Modu
我对 Laravel 4 和 Composer 还是很陌生。当我做 Laravel 4 教程时,我无法理解这两个命令之间的区别; php artisan dump-autoload 和 compose
search() 上的倒数第二项path 是(总是?)一个名为 Autoloads 的环境.关于这个话题,我能找到的只是 R language definition 第 26 页上的一句话。 (PDF
package My::Win32::Console; use warnings; use strict; use parent qw( Win32::Console ); sub new {
我的 MVC 结构如下: - web -- Classes --- Loader.php -- Core --- Controller.php --- Model.ph
本文实例分析了Yii2中YiiBase自动加载类、引用文件的方法。分享给大家供大家参考,具体如下: 在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现。但是这个也可以用来引用文件。
我是 PHP 自动加载的新手,在我的最新项目中需要 Horde_Text_Diff。我正在使用 Horde_Autoloader 来自动加载所需的文件,但是,我没有正确使用它。据我所知,互联网上没有一
我正在将 Symfonys Autoloader 用于具有以下文件夹/类结构的项目: App +- Package1 | +- Package2 +- Class1.php | - Interfa
我目前正在用 PHP 对我的框架进行编程(主要是出于教育原因,也是一种打发时间的方式)。我编写了一个自动加载器,它会自动扫描目录树并检测其中的所有类,并按以下格式创建一个数组: Array(
我有一个非常有趣的困境。我正在开发 CVS 存储库的 Perl 脚本接口(interface),并创建了 Perl 对象来表示 Modules , Paths , 和 Files .由于Modules
我被困在一个非常基本的问题上: 我正在尝试使用 Laravel,我使用 Composer 安装在我的 Windows 7 上。当我尝试使用 Wamp 在本地访问我的网站时,出现错误: Warning:
我目前正在开发一个需要从其父目录访问类的 Laravel 项目。 Composer .json > PSR-4: "psr-4": { ... "ModuleA
我将下面的代码作为一个自动加载类,但是看起来 clean 方法根本不起作用,它总是退回到 dirty 方法。 我是否错误地使用了 spl_autoload?如果是这样,正确(更好)的方法是什么?这是低
我正在学习 fat free 框架,但我遇到了一个问题。 我试用了 F3 Autoloader 并得到了这个: Internal Server Error Fatal error: Class 'Ga
我正在运行一个 Silex 小应用程序。试图让某种结构继续下去。 这是我的composer.json: { "require": { "silex/silex": "~1.3"
Kernel#autoload记录如下: Registers filename to be loaded (using Kernel::require) the first time that mod
我一直在使用 AUTOLOAD 在 Perl 中创建我的访问器,但我遇到了这种困惑(我已经搜索过 google 和 perldoc)。 我有这个代码: package Class; sub new {
我正在使用 CodeIgniter 4 的最新“master”分支 我有一个要自动加载的库。实际上,我希望拥有“一个”index.php(具有元数据、基本 html 结构等),通过它我可以通过我的"t
我们可以使用Autoloader跟踪是否已从 S3 存储桶加载的文件。我关于 Autoloader 的问题:有没有办法读取 Autoloader 数据库以获取已加载文件的列表? 我可以在 AWS Gl
单步执行供应商提供的库,一个调用是AUTOLOAD'ed,由UNIVERSAL::can() 捕获的coderef,然后调用该coderef。我相信调用是通过 DynaLoader 从已编译的库调用例
我是一名优秀的程序员,十分优秀!