Является ли более эффективным указание указанного c пути в требовании вместо деструктуризации? - PullRequest
1 голос
/ 07 апреля 2020

Я столкнулся с интересным разговором с коллегой, в документации некоторых библиотек вы все еще можете найти инструкции для их импорта следующим образом:

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

Однако я обычно использую деструктуризацию следующим образом:

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

Вопрос в том, какой из методов менее эффективен. Согласно моему logi c узлу придется анализировать файл в обоих случаях, чтобы получить доступ к определенной функции c, так что в плане эффективности различий нет. Я прав?

1 Ответ

0 голосов
/ 07 апреля 2020

Способ, которым это требуется, прост. Он идет к указанному файлу и выполняет все, а затем возвращает module.exports для «модуля», который впервые вызвал require, и кэширует свой ответ для следующего последующего вызова. .

Итак, давайте предположим, что вы звоните b. js

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

module.exports = {a,c}

b. js, a. js и c. js будут выполнены.

Или вы можете сделать только и напрямую потребовать a. js ;

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

В этом простом случае очевидно, что вызов "a" модуля будет быстрее. Но это при условии, что вы используете только a модуль устанавливаемой зависимости и , что почти никогда не бывает . В любом случае, если вызывать библиотеку целиком, она будет кэшироваться во всем приложении, и последующие вызовы будут выполняться быстрее. Так что это также зависит от того, как разработано ваше приложение.

Если вы собираетесь использовать какой-либо из других модулей библиотеки впоследствии, кэширование на одном go (при инициализации приложения) должно быть способом до go. Это означает, что требуется полная зависимость.

Также я не рассматриваю циклическую зависимость (случай, когда требуется a. js, также требуется b. js) потому что он считается в большинстве случаев плохо разработанным кодом (даже с поддержкой Node.js), и если это происходит, и вы не знаете, звоните a. js или b. js не имеет значения, потому что они будут вызываться (несмотря на ваши усилия по оптимизации) и кэшироваться в любом случае.

...