如果我使用内联要求,像这样:
function something(...paths) {
return require('path').join(...paths);
}
something('etc', 'etc');
引擎会在每次调用中都需要吗?示例:
let i = 10;
while (--i)
something(i, 'etc');
谢谢。
最佳答案
系统会在你的循环中每次调用require()
,但是用require()
加载的模块会被缓存,模块加载代码只会在第一次运行模块已加载。因此,虽然调用 require('path')
会产生一些额外的开销,但它只是在缓存中查找该模块名称并返回缓存的模块句柄。它不需要在您每次调用 require()
时加载、解析和运行模块。
也就是说,养成这样的习惯会更好:
const pathModule = require('path');
function something(...paths) {
return pathModule.join(...paths);
}
您这样做的另一个缺点是,第一次加载 path
模块时,系统将使用同步文件 I/O 来加载它,这不是一个好主意在多用户服务器中。文件 I/O 只是第一次发生,但仍然不是一个很好的实践。最好在服务器初始化时让同步 I/O 不受影响。
关于node.js - 使用内联要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045675/