Node.js 的缓存机制主要是指模块缓存。
当 Node.js 加载一个模块时,会首先尝试从模块的缓存中加载,如果缓存中有该模块,就直接返回该模块的Exports对象;否则,Node.js 会新建一个模块实例,执行该模块的代码,并在执行完毕后将该模块实例缓存在内存中。
以多个文件引用同一个模块为例,第 1 次引用模块时,Node.js 会将模块缓存下来,第 2 次以上的引用就会直接从缓存中读取,不再重新加载和执行该模块的代码。这样可以减少系统 I/O 操作,从而提高系统的性能。
需要注意的是,模块缓存是基于模块的绝对路径进行缓存的。即,如果同一个模块有两个路径,那么会被缓存成两个不同的模块。另外,每个模块实例都有自己的作用域,缓存的是该作用域下的变量和函数,与其它模块的实例作用域是独立的。