使用内联要求
Using inline require
如果我使用内联要求,像这样:
function something(...paths) {
return require('path').join(...paths);
}
something('etc', 'etc');
每次调用引擎都需要吗?示例:
let i = 10;
while (--i)
something(i, 'etc');
谢谢。
系统每次通过你的循环都会调用require()
,但是用require()
加载的模块会被缓存,模块加载代码只有运行第一次加载模块.因此,虽然调用 require('path')
有一点额外的开销,但它只是在缓存中查找该模块名称和 return 缓存的模块句柄。它不需要在你每次调用 require()
.
时加载、解析和 运行 模块
话虽如此,还是养成这样的习惯比较好:
const pathModule = require('path');
function something(...paths) {
return pathModule.join(...paths);
}
你这样做的另一个缺点是,第一次加载 path
模块时,系统将使用同步文件 I/O 来加载它,这不是一个好主意多用户服务器中的想法。文件 I/O 只是第一次发生,但仍然不是一个很好的做法。最好在服务器初始化时让同步 I/O 不受影响。
如果我使用内联要求,像这样:
function something(...paths) {
return require('path').join(...paths);
}
something('etc', 'etc');
每次调用引擎都需要吗?示例:
let i = 10;
while (--i)
something(i, 'etc');
谢谢。
系统每次通过你的循环都会调用require()
,但是用require()
加载的模块会被缓存,模块加载代码只有运行第一次加载模块.因此,虽然调用 require('path')
有一点额外的开销,但它只是在缓存中查找该模块名称和 return 缓存的模块句柄。它不需要在你每次调用 require()
.
话虽如此,还是养成这样的习惯比较好:
const pathModule = require('path');
function something(...paths) {
return pathModule.join(...paths);
}
你这样做的另一个缺点是,第一次加载 path
模块时,系统将使用同步文件 I/O 来加载它,这不是一个好主意多用户服务器中的想法。文件 I/O 只是第一次发生,但仍然不是一个很好的做法。最好在服务器初始化时让同步 I/O 不受影响。