Diferenças entre Exigir vs Importar

Módulos são uma construção fundamental para conhecer o JavaScript. Abordaremos os módulos JavaScript: exigimos e importamos durante este artigo Exigir vs Importar.

Esses módulos permitem que você escreva código reutilizável. Usando o NPM Package Manager (NPM), você publicará seu módulo na comunidade. Além disso, o NPM permite que você utilize módulos criados por desenvolvedores alternativos.

Há um sistema de 2 módulos que você selecionará em JavaScript:

Importando Módulos Utilizando Exigir, e Comercializando Utilizando um Módulo. Exportações e exportações. Foo

Importando módulos usando a importação ES6 e comercializando usando a exportação ES6.

Existem arestas de desempenho no uso de um sobre o outro? Existe o resto que sempre devemos reconhecer se temos a tendência de usar os módulos ES6 sobre os do nó? Vamos tentar resolver esse problema.

O que é exigir?

Exigir está acostumado a consumir módulos. Permite incorporar módulos em seus programas. Você adotará módulos intrinsecamente básicos do Node.js., módulos baseados na comunidade (módulos do nó) e módulos nativos.

Digamos que gostaríamos de digitalizar um arquivo do sistema de arquivos. O nó contém um módulo principal conhecido como 'fs':

const fs = require ('fs');

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

if (err) (jogue err; )

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

));

Como você verá, temos a tendência de importar o módulo "fs" para o nosso programa. Ele nos permite qualquer função anexada a ele, como "readFile".

Exigir pode procurar arquivos na seguinte ordem:

Módulos principais do Node.js integrados (como fs)

Módulos na pasta node_modules.

Se o nome do módulo contiver ./, / ou ../, ele procurará o diretório no caminho especificado. Corresponde às extensões: * .js, * .json e * .node.

Exigir recursos:

  • Você terá carregamento dinâmico onde quer que o nome do módulo carregado não seja predefinido / estático, ou onde você não carrega absolutamente um módulo, desde que seja "realmente necessário" (dependendo do fluxo de código vinculado).
  • O carregamento é síncrono. Ou seja, se você tiver vários requisitos, eles serão carregados e processados ​​um a um.
  • Você terá carregamento dinâmico onde quer que o nome do módulo carregado não seja predefinido / estático, ou onde você não carrega absolutamente um módulo, desde que seja "realmente necessário" (dependendo do fluxo de código vinculado).
  • O carregamento é síncrono. Ou seja, se você tiver vários requisitos, eles serão carregados e processados ​​um a um.
  • O requisito não costuma ser baseado principalmente. É extremamente improvável que se torne habitual atualmente que os módulos ES6 existam.

O carregamento real de qualquer módulo usando require () acontece em cinco etapas.

Resolução

Carregando

Invólucro

Avaliação

Armazenamento em cache

A resolução da primeira etapa é uma etapa fechada sempre que o node.js calcula os métodos de arquivo etc. no segundo que está sendo carregado, o nó puxa o código no método atual. Na quebra, o código dentro da operação, conforme mostrado acima, o envia para a VM para avaliação e, eventualmente, o armazena em cache.

Portanto, principalmente o nó nunca está ciente de quais símbolos um módulo commonJS vai exportar até e a menos que o módulo seja realmente avaliado. E essa costuma ser a maior distinção entre os módulos ECMAScript, pois o ESM é lexical e, portanto, os símbolos exportados são mais conhecidos antes que o código seja realmente avaliado.

O que é importação?

Existe uma proposta de import () também para formar instruções de importação aninhadas. Em contraste com a palavra-chave import lexical, import () operation é processado no momento ou na análise (mais como exigir). A sintaxe é como a seguinte.

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

Quando o módulo associado do ESM é analisado, antes de ser avaliado pela VM, é feita uma estrutura fechada referida como Registro do Módulo. Como resultado, qualquer erro relacionado à inconveniência de algumas imagens exportadas pode causar um erro antes da análise.

Casos de Uso

  • A carga do módulo sob demanda é viável.
  • A carga condicional dos módulos é factível
  • Uma promessa como manipulação assíncrona.

Importar recursos:

  • Você usará importações nomeadas para, por seleção, carregar apenas os itens que deseja. O que economizará memória?
  • A importação é assíncrona (e no atual ES6 Module Loader, é claro que é) e pode executar um toque mais alto.
  • Você usará importações nomeadas para, por seleção, carregar apenas os itens que deseja. O que economizará memória?
  • A importação é assíncrona (e no atual ES6 Module Loader, é claro que é) e pode executar um toque mais alto.
  • Parece que as importações não podem ser obtidas no Node por causa da versão 6.
  • No entanto, ele estará disponível em versões futuras. Você o utilizará atualmente, usando transpilers semelhantes ao Traceur Compiler, Babel ou Rollup.

Comparação cara a cara entre Exigir x Importar (infográficos)

Abaixo estão as 4 principais diferenças entre Exigir vs Importar

Principais diferenças entre Exigir vs Importar

Ambos exigem vs importação são escolhas populares no mercado; vamos discutir algumas das principais diferenças entre exigir versus importar:

  • Exigir é mais análise dinâmica e importação é mais análise estática
  • Exigir erro de arremessos em tempo de execução e Importar erro de arremesso ao analisar
  • Exigir não é lexical e Importar é lexical
  • Requer permanecer onde eles colocaram o arquivo e as importações são classificadas na parte superior do arquivo.
  • A importação é sempre executada no início do arquivo e não pode ser executada condicionalmente. Por outro lado, exigir pode ser usado em linha, condicionalmente,

Tabela de Comparação Exigir vs Importar

Como você pode ver, há muitas comparações entre Exigir vs Importar. Vamos olhar para o topo Comparação entre Exigir vs Importar abaixo

S. No.ExigirImportar
1 1Sintaxe:

var dep = require ("dep");

console.log (dep.bar);

dep.foo ();

Sintaxe:

import (foo, bar) de “dep”;

console.log (bar);

foo ();

2Como a importação permanece no estágio três e não é aplicada pelos navegadores nativamente, não podemos executar nenhum desempenho.Atualmente, depois de usar a importação no seu código, seus transpiladores precisam novamente, o sistema de modelagem commonJS. Portanto, atualmente, cada um é o mesmo.
3Embora não exista nenhum lucro no desempenho no momento, no entanto, ainda aconselho o uso de importação sobre a exigência, porque ela está prestes a ser nativa em JS e (apenas como resultado da sua origem) terá um desempenho superior à exigência.Como o resultado da importação é nativo, o requerimento não apresenta um desempenho superior ao comparar com a importação
4Você terá carregamento dinâmico sempre que o nome do módulo carregado não for predefinido. O carregamento é síncrono. Ou seja, se você tiver vários requisitos, eles serão carregados e processados ​​um a um. ES6Você pode usar importações nomeadas para, por seleção, carregar apenas os itens que deseja. O que economizará memória? A importação é assíncrona (e no atual ES6 Module Loader, é claro que é) e pode executar um toque mais alto. Além disso, o sistema de módulos requeridos não costuma ser baseado principalmente. É extremamente improvável que se torne habitual atualmente que os módulos ES6 existam.

Conclusão - Exigir vs Importar

Aprendemos sobre uma maneira de produzir módulos Node.js. e usá-lo em nosso código. Módulos nos permitem utilizar código de maneira simples. Eles fornecem praticidade isolada de módulos alternativos. Um código é menos complicado de gerenciar quando está em pequenos pedaços. Esse é geralmente o pensamento por trás de manter as funções em apenas uma tarefa ou ter arquivos que contenham apenas parte, ou uma parte de cada vez. Se você tem um aplicativo sofisticado e precisa rolar por muitas ou milhares de linhas de código, a tarefa de depurar ou simplesmente entender o aplicativo se torna muito mais difícil.

Felizmente, o JavaScript nos ajuda com isso ao importar e exigir. No entanto, você escreverá o código em um arquivo e o compartilhará; portanto, ele poderá ser empregado por outro arquivo ou arquivos. Espero que agora você deva ter uma idéia mais justa dos dois Import vs Require. Fique ligado no nosso blog para mais artigos como esses.

Artigo recomendado

Este foi um guia para as principais diferenças entre Exigir vs Importar. Aqui também discutimos as diferenças de chave Exigir vs Importar com infográficos e tabela de comparação. Você também pode consultar os seguintes artigos para saber mais -

  1. Desempenho do Node.js vs PHP
  2. Arduino vs Raspberry Pi 3
  3. Matriz C # vs Lista
  4. C ++ vs objetivo C
  5. Vetor C ++ vs matriz: o que preferir
  6. C ++ vs Visual C ++: Qual é o melhor