Diferențele dintre cerință și import

Modulele sunt o construcție cheie pentru cunoașterea JavaScript. Vom acoperi modulele JavaScript: necesită și importă în acest articol Obligare și import.

Aceste module vă permit să puneți în scris cod reutilizabil. Folosind Node Package Manager (NPM), veți publica modulul dvs. comunității. De asemenea, NPM vă permite să utilizați module create de dezvoltatori alternative.

Există 2 module de sistem pe care le vei selecta în JavaScript:

Importarea modulelor folosind necesită și comercializarea folosind un modul. Exporturi și exporturi. foo

Importarea modulelor utilizând importul ES6 și comercializarea utilizării exportului ES6.

Există margini de performanță pentru a utiliza una peste alta? Există restul pe care trebuie să-l recunoaștem întotdeauna dacă avem tendința de a folosi module ES6 peste nodurile? Să încercăm să rezolvăm această problemă.

Ce este Cerință?

Cerințe sunt obișnuiți să consume module. Vă permite să includeți module în programele dvs. Veți cuprinde intrinsec module Node.js core, module bazate pe comunitate (module nod) și module native.

Să spunem că am dori să scanăm un fișier din sistemul de fișiere. Nodul conține un modul de bază denumit „fs”:

const fs = necesită ('fs');

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

if (err) (arunca err; )

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

));

După cum veți vedea, avem tendința de a importa modulul „fs” în programul nostru. Ne permite orice funcție atașată, cum ar fi „readFile”.

Cerință poate căuta fișierele în următoarea ordine:

Module de bază Node.js core (ca fs)

Module în folderul noduri_module.

Dacă numele modulului conține un ./, / sau ../, acesta va căuta directorul din calea dată. Se potrivește cu extensiile: * .js, * .json și * .node.

Necesită caracteristici:

  • Veți avea încărcări dinamice oriunde numele modulului încărcat nu este predefinit / static sau oriunde nu încărcați absolut un modul, cu condiția să fie „cu adevărat necesar” (în funcție de fluxul de cod legat).
  • Încărcarea este sincronă. Adică dacă aveți mai multe cereri, acestea sunt încărcate și procesate unul câte unul.
  • Veți avea încărcări dinamice oriunde numele modulului încărcat nu este predefinit / static sau oriunde nu încărcați absolut un modul, cu condiția să fie „cu adevărat necesar” (în funcție de fluxul de cod legat).
  • Încărcarea este sincronă. Adică dacă aveți mai multe cereri, acestea sunt încărcate și procesate unul câte unul.
  • Cerința nu se bazează în mod obișnuit mai ales. Este extrem de puțin probabil să se obișnuiască în prezent că există module ES6.

Încărcarea reală a oricărui modul folosind require () se întâmplă în cinci pași.

Rezoluţie

Se încarcă

Ambalaj

Evaluare

Caching

Rezoluția primului pas este o etapă închisă oriunde node.js calculează metodele de fișiere etc. în cadrul celui de-al doilea care se încarcă, nodul trage codul în metoda curentă. În ceea ce privește înfășurarea codului în cadrul operațiunii, așa cum este arătat mai mare decât așa, îl trimite la VM pentru a evalua, astfel încât în ​​cele din urmă îl ascunde.

Deci, în primul rând nodul nu este niciodată conștient de simbolurile pe care un modul commonJS le va exporta până când modulul nu este evaluat cu adevărat. Și aceasta este adesea cea mai mare distincție cu modulele ECMAScript, deoarece rezultatul ESM este lexical și astfel, simbolurile exportate sunt mai cunoscute înainte de a evalua codul cu adevărat.

Ce este importul?

Există o propunere de import () să funcționeze și pentru a forma declarații de import cuibărit. Spre deosebire de cuvântul cheie de importare lexicală, operațiunea import () este procesată la momentul sau analiza (mai mult ca atare necesită). Sintaxa este la fel ca următoarea.

import („foo”). apoi ((modul) =>) .catch ((err) =>);

Când modulul ESM asociat este analizat, atunci înainte de a fi evaluat de VM, se realizează o structură închisă la care se face referire ca Înregistrarea modulului. Drept urmare, orice eroare privind inconvenientul a două imagini exportate poate crea o gafă înainte de analiză.

Cazuri de utilizare

  • Încărcarea modulului la cerere este posibilă.
  • Este posibilă încărcarea condiționată a modulelor
  • O promisiune precum manipularea asincronă.

Funcții de import:

  • Veți folosi importurile numite pentru a încărca doar prin selecție articolele dorite. Care va salva memoria?
  • Importul este asincron (și în încărcătorul modulului ES6 curent, desigur este) și poate efectua o atingere mai mare.
  • Veți folosi importurile numite pentru a încărca doar prin selecție articolele dorite. Care va salva memoria?
  • Importul este asincron (și în încărcătorul modulului ES6 curent, desigur este) și poate efectua o atingere mai mare.
  • Importurile par să nu poată fi obținute în nod din cauza versiunii 6.
  • Cu toate acestea, ar fi disponibile în versiunile viitoare. Îl vei folosi în aceste zile, folosind transpilere similare cu Traceur Compiler, Babel sau Rollup.

Comparație față-față B între între cerințe și import (infografie)

Mai jos sunt cele mai mari 4 diferențe între Cerință și Import

Diferențele cheie între cerință și import

Ambele cerințe și import sunt alegeri populare pe piață; haideți să discutăm câteva dintre diferențele majore dintre necesitate și import:

  • Necesită este mai mult de analiză dinamică și importul este mai mult de analiză statică
  • Cerință eroare Aruncă la runtime și Import aruncă eroare în timpul analizării
  • Obligă este Nonlexical și Importul este Lexical
  • Solicită să rămână acolo unde au pus fișierul și importurile sunt sortate în partea de sus a fișierului.
  • Importul este rulat întotdeauna la începutul fișierului și nu poate fi rulat condiționat. Pe de altă parte, require poate fi folosit în linie, condiționat,

Tabelul comparativ cu cerințe și importuri

După cum vedeți, există multe comparații între Import și Import. Să ne uităm la comparația de mai sus dintre Cerințe și Import mai jos

S. Nu.necesitaImport
1Sintaxa:

var dep = necesită („dep”);

console.log (dep.bar);

dep.foo ();

Sintaxa:

import (foo, bar) din „dep”;

console.log (bar);

foo ();

2Deoarece importul rămâne în etapa a treia și nu este aplicat în mod nativ de browsere, nu putem efectua o privire asupra performanței.În prezent, după ce utilizați importul în codul dvs., transpilații îl revin pentru a necesita, sistemul de modelare CommonJS. Prin urmare, pentru zilele noastre, fiecare este același.
3Cu toate că nu există un profit de performanță în acest moment, totuși mă sfătuiesc să utilizezi importul peste cerere, deoarece este pe punctul de a fi nativ în JS și va face (doar ca rezultat al nativului său) o performanță mai mare decât cea necesară.Ca urmare a importului este nativ, prin urmare, nu necesită performanță mai mare în comparație cu importul
4Veți avea încărcare dinamică oriunde numele modulului încărcat nu este predefinit. Încărcarea este sincronă. Adică dacă aveți mai multe cereri, acestea sunt încărcate și procesate unul câte unul. ES6Puteți utiliza importurile numite pentru a încărca doar prin selecție articolele dorite. Care va salva memoria? Importul este asincron (și în încărcătorul modulului ES6 curent, desigur este) și poate efectua o atingere mai mare. De asemenea, sistemul de module require nu se bazează în mod obișnuit. Este extrem de puțin probabil să se obișnuiască în prezent că există module ES6.

Concluzie - Necesită vs import

Am învățat despre o modalitate de a produce module Node.js și de a o folosi în codul nostru. Modulele ne permit să folosim codul simplu. Ele furnizează o practică izolată de modulele alternative. Un cod este mai puțin complicat de gestionat odată ce este în bucăți mici, mărite. Aceasta este adesea gândirea din spatele păstrării funcțiilor la o singură sarcină sau ca fișierele să conțină doar o parte, sau o parte, la un moment dat. Dacă aveți o aplicație fantezistă și trebuie să derulați prin multe sau mii de linii de cod, atunci sarcina de depanare sau de a înțelege pur și simplu aplicația devine mai dură.

Din fericire JavaScript ne ajută cu acest lucru prin importul și necesitatea. Cu toate acestea, veți scrie cod într-un singur fișier și veți împărți codul, prin urmare, acesta poate fi folosit de un alt fișier sau fișiere. Sper că acum trebuie să aveți o idee mai corectă atât despre Import, cât și despre Cerințe. Rămâneți la curent cu blogul nostru pentru mai multe articole ca acestea.

Articol recomandat

Acesta a fost un ghid pentru diferențele de top între Cerință și Import. Aici vom discuta, de asemenea, despre diferențele de cheie Cerință și Import cu infografie și tabelul de comparație. De asemenea, puteți arunca o privire la următoarele articole pentru a afla mai multe -

  1. Node.js vs PHP Performance
  2. Raspberry Pi 3 vs Arduino
  3. C # Array vs List
  4. C ++ față de obiectivul C
  5. C ++ Vector vs Array: Ce să preferați
  6. C ++ vs Visual C ++: Care este cel mai bun