使用内联要求

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 不受影响。