使用内联需求

时间:2017-09-05 01:08:18

标签: node.js require

如果我使用内联需求,请执行以下操作:

function something(...paths) {
  return require('path').join(...paths);
}

something('etc', 'etc');

每次通话都需要引擎吗?例如:

let i = 10;
while (--i)
  something(i, 'etc');

谢谢。

1 个答案:

答案 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取出。