Node.js 缓存加载机制
2016-11-10 14:21
501 查看
谈到node.js 就得说到模块,今天就得来说说node.js的模块缓存加载机制。
废话不多说我们直接上代码。
我首先自定义了一个模块
nodeJSTest/test13_module.js
下面看一下我的主模块(require.main)
nodeJSTest/test13.js
output:
从这里可以看出两个变量都加载了同一个模块,m1改变了index的值,同时m2也跟着改变了。
这是因为模块的缓存机制存在,m1加载模块的同时,解释器将这个加载的模块放入缓存区,如果下次还要加载的话,就不用根据目录来加载,而是直接从缓存区里面拿,这样可以提高效率。
所以这里,m1,m2实际上指向的是同一个模块对象。
那下面我们再来看一段代码。
output:
这下的m2打印的index却是undefined,这是因为我们添加了一行
下面我给大家解读一下这段代码,大家应该就会明白了
delete关键字用来删除缓存区里的对象,require.resolve可以用递归获取到传入模块的绝对路径,而require.cache则可以根据路径来查找该路径的模块的对象。
如果直接调用require.cache的话,则是遍历整个缓存区。
例如
output:
废话不多说我们直接上代码。
我首先自定义了一个模块
nodeJSTest/test13_module.js
var Student = function(){ this.index; this.say = function(){ console.log("my index is "+this.index); }; this.change = function(index){ this.index = index; } }; var student = new Student(); module.exports = student;
下面看一下我的主模块(require.main)
nodeJSTest/test13.js
var m1 = require("./test13_module"); var m2 = require("./test13_module"); //改变index的value m1.change(2); m1.say(); m2.say();
output:
my index is 2 my index is 2
从这里可以看出两个变量都加载了同一个模块,m1改变了index的值,同时m2也跟着改变了。
这是因为模块的缓存机制存在,m1加载模块的同时,解释器将这个加载的模块放入缓存区,如果下次还要加载的话,就不用根据目录来加载,而是直接从缓存区里面拿,这样可以提高效率。
所以这里,m1,m2实际上指向的是同一个模块对象。
那下面我们再来看一段代码。
var m1 = require("./test13_module"); delete require.cache[require.resolve("./test13_module")]; var m2 = require("./test13_module"); //改变index的value m1.change(2); m1.say(); m2.say();
output:
my index is 2 my index is undefined
这下的m2打印的index却是undefined,这是因为我们添加了一行
delete require.cache[require.resolve("./test13_module")];
下面我给大家解读一下这段代码,大家应该就会明白了
delete关键字用来删除缓存区里的对象,require.resolve可以用递归获取到传入模块的绝对路径,而require.cache则可以根据路径来查找该路径的模块的对象。
如果直接调用require.cache的话,则是遍历整个缓存区。
例如
console.log(require.cache);
output:
{ 'E:\nodeJSTest\test13.js': Module { id: '.', exports: {}, parent: null, filename: 'E:\\nodeJSTest\\test13.js', loaded: false, children: [], paths: [ 'E:\\nodeJSTest\\node_modules' ] } }
相关文章推荐
- Node.js如何把单个文件夹作为模块加载以及模块缓存
- 浅析node.js的模块加载机制
- Angular Material串串学客户端开发 2 - Node.js模块加载机制Require()
- Node.js---02、node.js 模块加载机制
- node.js 模块加载机制
- nodejs require 加载机制
- node.js(3) 模块加载机制
- Node.js模块以及模块加载机制
- 简单模拟node.js中require的加载机制
- Node.js 模块加载机制
- Node.js的模块载入方式与机制
- 进程与线程。js是什么运行机制?node.js是什么运行机制?
- Exitjs tree动态连接数据库加载Node
- 关于pjax 如何设置不缓存加载页面里面的js文件和不修改浏览器中的URL地址
- HTML5缓存机制浅析:移动端Web加载性能优化
- 2. node.js 模块管理机制
- Node.js机制及原理理解初步
- Node.js的模块机制
- Node.js中的模块机制学习笔记
- Android之ListView异步加载网络图片(优化缓存机制)