node.js - 在node中,在不同的模块中的相同模块是否会重复加载?
PHPz
PHPz 2017-04-17 11:55:26
[Node.js讨论组]

如题,
如果现在有如下的模块

  • A

    • B

      • C
    • D

      • C

如果在B中引用了C这个模块,那么在D时,引用C这个模块会引用B下的缓存还是重新引用D下面的C?

另外require是根据什么来判断是否从文件加载还是从缓存加载?

PHPz
PHPz

学习是最好的投资!

全部回复(2)
高洛峰

昨天刚好看了@朴灵大大《node.js深入浅出》关于模块加载这部分,针对你的问题回答如下:

Node中引入模块,需要经历3个步骤:(1)路径分析,(2)文件定位,(3)编译执行

为了减少二次引用时的开销,Node对引入过的模块都会进行缓存,缓存的是编译和执行后的对象

不论是核心模块还是文件模块,require()方法对相同模块的二次加载都一律采用缓存优先的方式,这是第一优先级的。

那么“require是根据什么来判断是否从文件加载还是从缓存加载?”

每一个编译成功的模块都会将其文件路径作为索引缓存在Module._cache对象上,以提高二次引入的性能。

所以通过require引入一个模块时,Node会先去检查缓存中有没有,即检查Module._cache对象里是否有要引入模块的文件路径,有,则从缓存加载,没有则从文件加载。

从而,在不同路径下的同一个模块会被Node认为是不同的模块。

ps.这本书真的很不错,推荐看看~ 模块加载这部分在p15-p20

PHP中文网

好问题,看了下文档:Cycles, Conflicts, and Folder Parsimony

参考这一节文档:caching,可以看到如下内容:

Modules are cached after the first time they are loaded. This means (among other things) that every call to require('foo') will get exactly the same object returned, if it would resolve to the same file.

最后一句话,有没有帮助到你?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号