【问题标题】:Using inline require使用内联要求
【发布时间】:2017-09-05 01:08:18
【问题描述】:

如果我使用内联 require,像这样:

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

something('etc', 'etc');

引擎在每次调用中都需要吗?示例:

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

谢谢。

【问题讨论】:

    标签: node.js require


    【解决方案1】:

    系统将在每次循环中调用require(),但使用require() 加载的模块会被缓存,并且模块加载代码仅在模块第一次加载时运行。因此,虽然调用require('path') 有一点额外开销,但它只是在缓存中查找该模块名称并返回缓存的模块句柄。无需每次调用​​require()时加载、解析和运行模块。

    也就是说,还是养成这样的习惯会更好:

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

    您这样做的另一个缺点是,第一次加载 path 模块时,系统将使用同步文件 I/O 来加载它,这在多用户中不是一个好主意服务器。文件 I/O 只是第一次发生,但仍然不是一个好习惯。最好在服务器初始化时消除同步 I/O。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      相关资源
      最近更新 更多