在 require 中指定特定路径而不是解构是否更有效?

Is it more efficient to specify a specific path in require instead of destructuring?

我 运行 与同事进行了一次有趣的对话,在某些图书馆的文档中,您仍然可以找到像这样导入它们的说明:

const a = require('b/a');

不过,我通常这样使用解构:

const { a } = require('b');

问题是:哪种方法效率较低。根据我的逻辑,节点将不得不分析两者中的文件才能访问特定功能,因此在效率方面没有任何差异。我说得对吗?

require 的工作方式很简单。它转到指定的文件并执行所有内容,然后 returns module.exports 对于 "module"第一次调用 require 并为下一次后续调用缓存其响应。

因此,在您的情况下,我们假设您正在调用 b.js

//b.js
const a = require ('a')
const c = require ('c')

module.exports = {a,c}

b.jsa.jsc.js 将被执行。

或者你可以只直接要求 a.js;

//a.js
//no requires
const a = someFunction();
modules.exports = a;

在这种简单的情况下,显然调用 "a" 模块会更快。但是,假设您只使用正在安装的依赖项的 a 模块,而 几乎从来没有这种情况 。无论哪种方式,如果完全调用库,它将在整个应用程序中缓存,并且后续调用会更快。 所以它也取决于你的应用程序的设计方式。

如果您之后打算使用该库的任何其他模块,那么一次性缓存(在应用程序初始化中)应该是可行的方法。这意味着,需要整个依赖关系。

我也没有考虑循环依赖(需要a.js也需要b.js的情况)因为在大多数情况下,它被认为是设计不良的代码(即使 Node.js 支持它),如果发生这种情况并且您不知道调用 a.jsb.js 无关紧要,因为它们会被调用(尽管您努力优化)并缓存。