Различия между требованием и импортом

Модули являются ключевой конструкцией для понимания JavaScript. Мы рассмотрим модули JavaScript: требовать и импортировать в этой статье Require vs Import.

Эти модули позволяют писать многократно используемый код. Используя Node Package Manager (NPM), вы опубликуете свой модуль для сообщества. Кроме того, NPM позволяет вам использовать модули, созданные альтернативными разработчиками.

Существует 2 модуля системы, которые вы выберете в JavaScript:

Импортирование модулей с использованием require и коммерциализация с использованием модуля. Экспорт и экспорт. Foo

Импорт модулей с использованием импорта ES6 и коммерциализация с использованием экспорта ES6.

Есть ли какие-то ограничения производительности при использовании одного над другим? Есть ли что-то, что мы должны всегда распознавать, если мы склонны использовать модули ES6 вместо узлов? Попробуем решить эту проблему.

Что такое Require?

Требуются привыкшие потреблять модули. Это позволяет вам включать модули в ваши программы. Вы включите в себя основные модули Node.js, основанные на сообществе модули (модули узлов) и собственные модули.

Допустим, мы хотим отсканировать файл из файловой системы. Узел содержит основной модуль, называемый 'fs':

const fs = require ('fs');

fs.readFile ('./ file.txt', 'utf-8', (err, data) => (

if (err) (throw err; )

console.log ('data:', data);

));

Как вы увидите, у нас есть тенденция импортировать модуль «fs» в нашу программу. Это позволяет нам использовать любую функцию, например «readFile».

Require может искать файлы в следующем порядке:

Встроенные основные модули Node.js (например, fs)

Модули в папке node_modules.

Если имя модуля содержит ./, / или ../, он будет искать каталог в указанном пути. Он соответствует расширениям: * .js, * .json и * .node.

Требовать Особенности:

  • Вы будете иметь динамическую загрузку там, где имя загруженного модуля не является предопределенным / статическим, или везде, где вы не совсем загружаете модуль, если он «действительно необходим» (в зависимости от связанного потока кода).
  • Загрузка синхронная. Это означает, что если у вас есть несколько требований, они загружаются и обрабатываются по одному.
  • Вы будете иметь динамическую загрузку там, где имя загруженного модуля не является предопределенным / статическим, или везде, где вы не совсем загружаете модуль, если он «действительно необходим» (в зависимости от связанного потока кода).
  • Загрузка синхронная. Это означает, что если у вас есть несколько требований, они загружаются и обрабатываются по одному.
  • Требование обычно не основано главным образом. В настоящее время крайне маловероятно, что модули ES6 станут привычными.

Фактическая загрузка любого модуля с использованием require () происходит в пять шагов.

разрешение

загрузка

Оберточная бумага

оценка

Кэширование

Разрешение первого шага является вложенным этапом, где node.js вычисляет методы файла и т. Д., В течение второго загружаемого момента узел извлекает код в текущем методе. В завершение оборачивает код внутри операции, как показано выше, поэтому отправляет его в ВМ для оценки, чтобы в конечном итоге его кешировать.

Таким образом, прежде всего узел никогда не знает, какие символы отправляет на экспорт модуль commonJS, и если он действительно не оценен. И это часто является самым большим отличием от модулей ECMAScript, поскольку ESM является лексическим, и поэтому экспортированные символы более известны, прежде чем код будет действительно оценен.

Что такое импорт?

Есть предложение import (), работающее также для формирования вложенных операторов import. В отличие от лексического ключевого слова import, операция import () обрабатывается во время или в процессе анализа (больше похоже на require). Синтаксис такой же, как следующий.

import («foo»). then ((module) =>) .catch ((err) =>);

Когда связанный модуль ESM анализируется, то перед его оценкой VM создается закрытая структура, называемая модульной записью. В результате любая ошибка, связанная с неудобствами пары экспортированных изображений, может привести к ошибке перед анализом.

Случаи использования

  • Возможна загрузка модуля по требованию.
  • Условная загрузка модулей выполнима
  • Обещание как асинхронная обработка.

Особенности импорта:

  • Вы будете использовать именованный импорт, чтобы при выборе загружать только те элементы, которые вам нужны. Что сэкономит память?
  • Импорт является асинхронным (и в текущем ES6 Module Loader, конечно, это так) и может выполнить касание выше.
  • Вы будете использовать именованный импорт, чтобы при выборе загружать только те элементы, которые вам нужны. Что сэкономит память?
  • Импорт является асинхронным (и в текущем ES6 Module Loader, конечно, это так) и может выполнить касание выше.
  • Похоже, что импорт не доступен в Node из-за версии 6.
  • Тем не менее, это будет доступно в будущих версиях. Вы будете использовать его в наши дни, используя транспортеры, похожие на Traceur Compiler, Babel или Rollup.

Сравнение личных данных между потребностями и импортом (инфографика)

Ниже приведены 4 основных различия между Require и Import

Ключевые различия между Требуется против импорта

Оба Require vs Import являются популярным выбором на рынке; Давайте обсудим некоторые основные различия между Require и Import:

  • Require - это больше динамического анализа, а import - больше статического анализа
  • Ошибка Require Throws во время выполнения и ошибка Import throws при разборе
  • Require is Nonlexical, а Import is Lexical
  • Требуется остаться там, где они поместили файл, а импорт отсортирован в начало файла.
  • Импорт всегда запускается в самом начале файла и не может быть выполнен условно. С другой стороны, require может быть использован inline, условно,

Требовать сравнения с таблицей импорта

Как вы можете видеть, есть много сравнений между Require против Import. Давайте посмотрим на верхнее Сравнение между Require и Import ниже

С. Нет.требоватьимпорт
1Синтаксис:

var dep = require («dep»);

console.log (dep.bar);

dep.foo ();

Синтаксис:

import (foo, bar) из «dep»;

console.log (бар);

Foo ();

2Поскольку импорт остается на третьем этапе и изначально не поддерживается браузерами, мы не можем оценить производительность.В настоящее время, как только вы используете импорт в своем коде, ваши конвейеры возвращают его обратно, к системе CommonJS моделирования. Поэтому на сегодня все одинаковы.
3Хотя в данный момент прибыли от производительности нет, тем не менее, я все же посоветую использовать импорт поверх require, потому что он собирается быть нативным в JS и будет (просто в результате своего натива) работать выше, чем require.В результате импорта является родным, поэтому require не работает выше по сравнению с import
4У вас будет динамическая загрузка везде, где имя загруженного модуля не предопределено. Загрузка синхронная. Это означает, что если у вас есть несколько требований, они загружаются и обрабатываются по одному. ES6Вы можете использовать именованный импорт для выбора загрузки только элементов, которые вы хотели бы. Что сэкономит память? Импорт является асинхронным (и в текущем ES6 Module Loader, конечно, это так) и может выполнить касание выше. Кроме того, система модулей require обычно не основана на принципе. В настоящее время крайне маловероятно, что модули ES6 станут привычными.

Вывод - Требовать против импорта

Мы узнали о способе создания модулей Node.js и использования его в нашем коде. Модули позволяют нам просто использовать код. Они обеспечивают практичность, изолированную от альтернативных модулей. Код менее сложен в управлении, если он состоит из маленьких кусочков. За этим часто стоит задуматься, чтобы функции выполнялись только для одной задачи или чтобы файлы содержали только несколько или одну часть за раз. Если у вас есть модное приложение и вы должны прокручивать много или тысячи строк кода, тогда задача отладки или простого понимания приложения становится настолько сложной.

К счастью, JavaScript помогает нам с этим, используя Import vs Require. Однако вы будете писать код в одном файле и делиться этим кодом, поэтому он может использоваться другим файлом или файлами. Я надеюсь, что теперь у вас, должно быть, есть более справедливое представление о том, как импортировать и требовать Следите за обновлениями на нашем блоге, чтобы узнать больше подобных статей

Рекомендуемая статья

Это было руководство к основным различиям между Require против Import. Здесь мы также обсуждаем ключевые различия между требованием и импортом с инфографикой и таблицей сравнения. Вы также можете взглянуть на следующие статьи, чтобы узнать больше -

  1. Node.js против производительности PHP
  2. Raspberry Pi 3 против Arduino
  3. C # Array vs List
  4. C ++ против Objective C
  5. C ++ Vector vs Array: что предпочесть
  6. C ++ против Visual C ++: что лучше