Skip to main content

nodejs 中的模块加载机制笔记

· One min read

由于嫌项目中用到的 global 对象不太好,所以想将全局变量封装到自定义的 global 模块中,记得模块是有闭包特性的。

但是我的疑问是,比如我的 global 变量是一个变的,我在某个 js 中引入模块,那么我在另一个地方引入是不是重新初始化了呢。

InfoQ 和博客园找到了些答案,记下笔记。

模块载入策略

Node.js 的模块分为两类,一类为原生(核心)模块,一类为文件模块。原生模块在 Node.js 源代码编译的时候编译进了二进制执行文件,加载的速度最快。另一类文件模块是动态加载的,加载速度比原生模块慢。但是 Node.js 对原生模块和文件模块都进行了缓存,于是在第二次 require 时,是不会有重复开销的。其中原生模块都被定义在 lib 这个目录下面,文件模块则不定性。

原文地址:http://www.infoq.com/cn/articles/nodejs-module-mechanism/

在《深入浅出 nodejs》有这样一段(有部分增减):

1、nodejs 引入模块分四个步骤

路径分析 文件定位 编译执行 加入内存 2、核心模块部分在 node 源代码的编译过程中就编译成了二级制文件,在 node 启动时就直接加载如内存,所以这部分模块引入时,前三步省略,直接加入。

3、nodejs 的模块加载和浏览器 js 加载一样都有缓存机制,不同的是,浏览器仅仅缓存文件,而 nodejs 缓存的是编译和执行后的对象(缓存内存)。

原文地址:http://www.cnblogs.com/tyhmj/p/3799039.html

等测试后再发表评论~