Javascript NodeJ是否重用已加载的模块并共享它';s的价值观?
我开始在NodeJS中构建我的项目,我想知道Javascript NodeJ是否重用已加载的模块并共享它';s的价值观?,javascript,node.js,Javascript,Node.js,我开始在NodeJS中构建我的项目,我想知道 NodeJS是否对需要相同模块的模块重用已加载的模块 模块是否在需要它们的模块之间保持相同的“状态” 如果其中一个或两个都发生了,有什么问题?我面临着一个类似于循环和setTimeout以及异步代码的问题 目前我已经测试了4个文件 common.js var i = 0; function add(v){i += v;} function view(){console.log(i);} module.exports = { add
- NodeJS是否对需要相同模块的模块重用已加载的模块
- 模块是否在需要它们的模块之间保持相同的“状态”
- 如果其中一个或两个都发生了,有什么问题?我面临着一个类似于循环和
以及异步代码的问题setTimeout
目前我已经测试了4个文件
common.js
var i = 0; function add(v){i += v;} function view(){console.log(i);} module.exports = { add : add, view : view }
exports.common = require('./common.js');
var a = require('./a.js'), b = require('./b.js'); function start(){ http.createServer(function (req, res) { a.common.add(2); a.common.view(); b.common.add(4); b.common.view(); a.common.view(); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(config.port, config.address || '127.0.0.1'); console.log('Server running'); }
和a.js
b.js
var i = 0; function add(v){i += v;} function view(){console.log(i);} module.exports = { add : add, view : view }
exports.common = require('./common.js');
var a = require('./a.js'), b = require('./b.js'); function start(){ http.createServer(function (req, res) { a.common.add(2); a.common.view(); b.common.add(4); b.common.view(); a.common.view(); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(config.port, config.address || '127.0.0.1'); console.log('Server running'); }
server.js
var i = 0; function add(v){i += v;} function view(){console.log(i);} module.exports = { add : add, view : view }
exports.common = require('./common.js');
var a = require('./a.js'), b = require('./b.js'); function start(){ http.createServer(function (req, res) { a.common.add(2); a.common.view(); b.common.add(4); b.common.view(); a.common.view(); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(config.port, config.address || '127.0.0.1'); console.log('Server running'); }
2 - view() via a.js on favicon request
6 - view() via b.js on favicon request
6 - view() via a.js on favicon request
8 - view() via a.js
12 - view() via b.js
12 - view() via a.js
即使两个单独的模块需要它,它似乎也会共享该模块,甚至在模块和请求之间保持状态是的,所有模块在第一次加载后都会缓存。您可以在中阅读有关模块缓存的更多信息。Node.js缓存模块显然是出于性能原因 声明来自: 模块在第一次加载后被缓存。这意味着(除其他外)每个对
require('foo')
的调用都将返回完全相同的对象,如果它将解析为相同的文件
多次调用require('foo')
可能不会导致多次执行模块代码。这是一个重要特征。使用它,可以返回“部分完成”的对象,从而允许加载可传递的依赖项,即使它们会导致循环。
如果您想让一个模块多次执行代码,那么请导出一个函数并调用该函数
foo
和bar
从哪里来?@Amberlamps编辑。我在代码中使用了foo
和bar
。