如果我使用内联需求,请执行以下操作:
function something(...paths) {
return require('path').join(...paths);
}
something('etc', 'etc');
每次通话都需要引擎吗?例如:
let i = 10;
while (--i)
something(i, 'etc');
谢谢。
答案 0 :(得分:4)
系统每次循环都会调用require()
,但是加载了require()
的模块会被缓存,模块加载代码只会在第一次加载模块时运行。因此,虽然有一些额外的开销调用require('path')
,但只是在缓存中查找该模块名称并返回缓存的模块句柄。每次调用require()
时,都不需要加载,解析和运行模块。
尽管如此,养成这个习惯仍然会更好:
const pathModule = require('path');
function something(...paths) {
return pathModule.join(...paths);
}
你这样做的另一个缺点是,第一次加载path
模块时,系统将使用同步文件I / O加载它,这在多个模块中不是一个好主意 - 用户服务器。文件I / O刚刚第一次发生,但仍然不是一个很好的做法。最好在服务器初始化时将同步I / O取出。