Różnice między wymaganiem a importem

Moduły są kluczową konstrukcją umożliwiającą znajomość JavaScript. Omówimy moduły JavaScript: wymagaj i importuj podczas tego artykułu Wymagaj kontra importuj.

Moduły te pozwalają na pisanie kodu wielokrotnego użytku. Korzystając z Menedżera pakietów Node (NPM), opublikujesz swój moduł w społeczności. Ponadto NPM pozwala na wykorzystanie modułów stworzonych przez alternatywnych programistów.

W JavaScript jest dostępny 2 modułowy system:

Importowanie modułów przy użyciu wymagania i komercjalizacja przy użyciu modułu. Eksport i eksport. bla

Importowanie modułów za pomocą importu ES6 i komercjalizacja za pomocą eksportu ES6.

Czy są jakieś zalety w korzystaniu z jednego nad drugim? Czy jest cała reszta, którą musimy zawsze rozpoznać, jeśli mamy tendencję do używania modułów ES6 zamiast Node? Spróbujmy rozwiązać ten problem.

Co jest wymagane?

Wymagają są przyzwyczajeni do konsumpcji modułów. Pozwala na włączenie modułów do swoich programów. Będziesz obejmować wewnętrznie podstawowe moduły Node.js, moduły oparte na społeczności (moduły węzłów) i moduły macierzyste.

Powiedzmy, że chcielibyśmy przeskanować plik z systemu plików. Węzeł zawiera moduł podstawowy zwany „fs”:

const fs = wymagany („fs”);

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

if (err) (throw err; )

console.log („data:”, dane);

));

Jak zobaczysz, mamy tendencję do importowania modułu „fs” do naszego programu. Pozwala nam to na dołączenie dowolnej funkcji, np. „ReadFile”.

Wymagaj może rozglądać się za plikami w następującej kolejności:

Wbudowane podstawowe moduły Node.js (jak fs)

Moduły w folderze node_modules.

Jeśli nazwa modułu zawiera ./, / lub ../, rozejrzy się za katalogiem w podanej ścieżce. Pasuje do rozszerzeń: * .js, * .json i * .node.

Wymagaj funkcji:

  • Będziesz miał ładowanie dynamiczne wszędzie tam, gdzie nazwa załadowanego modułu nie jest predefiniowana / statyczna, lub gdziekolwiek nie ładujesz modułu absolutnie, pod warunkiem, że jest „naprawdę wymagany” (w zależności od powiązanego przepływu kodu).
  • Ładowanie jest synchroniczne. Oznacza to, że jeśli masz wiele wymagań, są one ładowane i przetwarzane jeden po drugim.
  • Będziesz miał ładowanie dynamiczne wszędzie tam, gdzie nazwa załadowanego modułu nie jest predefiniowana / statyczna, lub gdziekolwiek nie ładujesz modułu absolutnie, pod warunkiem, że jest „naprawdę wymagany” (w zależności od powiązanego przepływu kodu).
  • Ładowanie jest synchroniczne. Oznacza to, że jeśli masz wiele wymagań, są one ładowane i przetwarzane jeden po drugim.
  • Wymaganie nie jest zwykle oparte na zwyczajach. Obecnie jest bardzo mało prawdopodobne, aby stały się powszechne, że istnieją moduły ES6.

Rzeczywiste ładowanie dowolnego modułu za pomocą metody wymaga () odbywa się w pięciu krokach.

Rozkład

Ładowanie

Zawijanie

Ocena

Buforowanie

Rozdzielczość pierwszego kroku jest krokiem zamkniętym, w którym węzeł.js oblicza metody plików itp. W drugim ładowanym węźle, węzeł pobiera kod w ramach bieżącej metody. W zawijaniu zawija kod w operacji, jak pokazano wyżej, i wysyła go do VM w celu oceny, więc ostatecznie buforuje.

Zatem przede wszystkim węzeł nigdy nie zdaje sobie sprawy z tego, jakie symbole wspólny moduł JS eksportuje do i dopóki moduł nie zostanie naprawdę oceniony. Jest to często największe rozróżnienie w modułach ECMAScript, ponieważ ESM jest leksykalny, dlatego eksportowane symbole są lepiej znane przed prawdziwą oceną kodu.

Co to jest import?

Istnieje również propozycja operacji import (), która tworzy zagnieżdżone instrukcje importu. W przeciwieństwie do leksykalnego słowa kluczowego import, operacja import () jest przetwarzana w czasie lub analizie (bardziej jak wymagają). Składnia jest następująca.

import („foo”). następnie ((moduł) =>). catch ((err) =>);

Po przeanalizowaniu skojarzonego modułu ESM, przed jego oceną przez maszynę wirtualną, tworzona jest zamknięta struktura zwana rekordem modułu. W rezultacie każdy błąd związany z niedogodnością kilku eksportowanych obrazów może spowodować błąd przed analizą.

Przypadków użycia

  • Możliwe jest ładowanie modułu na żądanie.
  • Warunkowe ładowanie modułów jest wykonalne
  • Obietnica taka jak obsługa asynchroniczna.

Funkcje importu:

  • Będziesz używał nazwanych importów do wyboru, ładując tylko te elementy, które chcesz. Który pozwoli zaoszczędzić pamięć?
  • Importowanie jest asynchroniczne (i w obecnym module ładującym ES6, oczywiście, że tak) i może wykonać dotyk nieco wyżej.
  • Będziesz używał nazwanych importów do wyboru, ładując tylko te elementy, które chcesz. Który pozwoli zaoszczędzić pamięć?
  • Importowanie jest asynchroniczne (i w obecnym module ładującym ES6, oczywiście, że tak) i może wykonać dotyk nieco wyżej.
  • Wydaje się, że importy nie są dostępne w Węźle z powodu wersji 6.
  • Jednak będą dostępne w przyszłych wersjach. Będziesz go teraz używać, używając transpilatorów podobnych do Traceur Compiler, Babel lub Rollup.

Porównanie bezpośrednie między wymaganiem a importem (infografiki)

Poniżej znajdują się 4 najważniejsze różnice między wymaganiami a importem

Kluczowe różnice między wymaganiem a importem

Zarówno Require jak i Import są popularnymi wyborami na rynku; omówmy niektóre z głównych różnic między wymaganiami a importem:

  • Wymagaj to bardziej analizy dynamicznej, a import to bardziej analiza statyczna
  • Wymagaj błędu zgłaszania w czasie wykonywania, a import rzuca błąd podczas analizowania
  • Wymagaj jest nieleksu, a import jest leksykalny
  • Wymaga pozostania tam, gdzie umieścił plik, a importowane pliki zostaną posortowane na początku pliku.
  • Import jest zawsze uruchamiany na samym początku pliku i nie można go uruchomić warunkowo. Z drugiej strony, wymaganie może być używane inline, warunkowo,

Tabela porównawcza Wymagaj kontra import

Jak widać, istnieje wiele porównań między wymaganiem a importem. Spójrzmy na najlepsze Porównanie między wymaganiem a importem poniżej

S. Nie.WymagaćImport
1Składnia:

var dep = wymagany („dep”);

console.log (dep.bar);

dep.foo ();

Składnia:

import (foo, bar) z „dep”;

console.log (bar);

bla();

2)Ponieważ import pozostaje na trzecim etapie i nie jest natywnie wymuszany przez przeglądarki, nie jesteśmy w stanie uruchomić żadnej wydajności.Obecnie, gdy użyjesz importu w swoim kodzie, Twoje transpilery tego wymagają, system modelowania commonJS. Dlatego na dzień dzisiejszy każdy jest taki sam.
3)Chociaż w tej chwili nie ma żadnego zysku z wydajności, nadal będę doradzał, aby użyć importu nad wymaganiem, ponieważ ma on być natywny w JS i będzie (tak jak wynik jego natywnej) działać lepiej niż wymaga.W wyniku importu jest natywny, dlatego wymaga, aby nie działał wyżej w porównaniu do importu
4Będziesz miał ładowanie dynamiczne wszędzie tam, gdzie nazwa załadowanego modułu nie jest predefiniowana. Ładowanie jest synchroniczne. Oznacza to, że jeśli masz wiele wymagań, są one ładowane i przetwarzane jeden po drugim. ES6Możesz użyć nazwanego importu do wyboru, ładując tylko elementy, które chcesz. Który pozwoli zaoszczędzić pamięć? Importowanie jest asynchroniczne (i w obecnym module ładującym ES6, oczywiście, że tak) i może wykonać dotyk nieco wyżej. Ponadto wymagany system modułowy nie jest zwykle oparty. Obecnie jest bardzo mało prawdopodobne, aby stały się powszechne, że istnieją moduły ES6.

Wniosek - Wymagaj a importuj

Dowiedzieliśmy się o sposobie produkcji modułów Node.js i wykorzystania ich w naszym kodzie. Moduły pozwalają nam po prostu wykorzystywać kod. Zapewniają one funkcjonalność odizolowaną od alternatywnych modułów. Kod jest mniej skomplikowany w zarządzaniu, gdy składa się z małych kawałków wielkości kęsa. Takie jest często myślenie o utrzymywaniu funkcji w jednym zadaniu lub o tym, że pliki zawierają tylko niektóre lub jedną część na raz. Jeśli masz fantazyjną aplikację i powinieneś przewijać wiele lub tysiące wierszy kodu, zadanie debugowania lub po prostu zrozumienia aplikacji staje się o wiele trudniejsze.

Na szczęście JavaScript pomaga nam w tym, mając opcję Importuj kontra Wymagaj. Jednak napiszesz kod w jednym pliku i udostępnisz ten kod, dlatego można go wykorzystać w innym pliku lub plikach. Mam nadzieję, że teraz musieliście mieć bardziej sprawiedliwy pomysł na import i wymaganie. Bądź na bieżąco z naszym blogiem, aby uzyskać więcej takich artykułów.

Polecany artykuł

To był przewodnik po najważniejszych różnicach między wymaganiami a importem. Tutaj omawiamy także różnice między kluczami Wymagaj a Importuj z infografikami i tabelą porównawczą. Możesz także zapoznać się z następującymi artykułami, aby dowiedzieć się więcej -

  1. Wydajność Node.js vs. PHP
  2. Raspberry Pi 3 vs Arduino
  3. C # Array vs List
  4. C ++ a cel C
  5. C ++ Vector vs Array: Co preferować
  6. C ++ vs Visual C ++: Który jest najlepszy