Verschillen tussen vereisen versus importeren

Modules zijn een belangrijke constructie om JavaScript te kennen. We behandelen JavaScript-modules: vereisen en importeren tijdens dit artikel Vereisen versus importeren.

Met deze modules kunt u herbruikbare code schrijven. Door Node Package Manager (NPM) te gebruiken, publiceert u uw module aan de community. Met NPM kunt u ook modules gebruiken die zijn gemaakt door alternatieve ontwikkelaars.

Er is een 2 modulesysteem dat u in JavaScript selecteert:

Modules importeren met behulp van vereist, en commercialiteit met behulp van een module. Uitvoer en uitvoer. Foo

Modules importeren met ES6-import en commercialiteit met ES6-export.

Zijn er prestatieranden aan het gebruik boven elkaar? Is er de rest die we altijd moeten herkennen als we de neiging hebben om ES6-modules te gebruiken boven Node-modules? Laten we proberen dit probleem op te lossen.

Wat is vereist?

Vereisen zijn gewend om modules te consumeren. Hiermee kunt u modules in uw programma's opnemen. U zult intrinsiek kernmodules van Node.js, community-gebaseerde modules (knooppuntmodules) en native modules omarmen.

Laten we zeggen dat we een bestand van het bestandssysteem willen scannen. Knooppunt bevat een kernmodule die 'fs' wordt genoemd:

const fs = vereisen ('fs');

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

if (err) (throw err; )

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

));

Zoals u zult zien, hebben we de neiging om de "fs" -module in ons programma te importeren. Het stelt ons in staat om elke functie die eraan gekoppeld is, zoals "readFile".

Require kan in de volgende volgorde naar bestanden zoeken:

Ingebouwde kern Node.js modules (zoals fs)

Modules in de map node_modules.

Als de modulenaam een ​​./, / of ../ bevat, zoekt deze naar de map binnen het opgegeven pad. Het komt overeen met de extensies: * .js, * .json en * .node.

Functies vereisen:

  • U zult dynamisch laden waar de geladen modulenaam niet vooraf is gedefinieerd / statisch, of waar u een module niet absoluut laadt op voorwaarde dat het "echt vereist" is (afhankelijk van de gebonden codestroom).
  • Laden is synchroon. Dit betekent dat als u meerdere behoeften heeft, deze één voor één worden geladen en verwerkt.
  • U zult dynamisch laden waar de geladen modulenaam niet vooraf is gedefinieerd / statisch, of waar u een module niet absoluut laadt op voorwaarde dat het "echt vereist" is (afhankelijk van de gebonden codestroom).
  • Laden is synchroon. Dit betekent dat als u meerdere behoeften heeft, deze één voor één worden geladen en verwerkt.
  • De vereiste is meestal niet gebaseerd. Het is zeer onwaarschijnlijk dat het momenteel gebruikelijk wordt dat ES6-modules bestaan.

Het daadwerkelijk laden van elke module met behulp van vereist () gebeurt in vijf stappen.

Resolutie

Bezig met laden

omhulsel

evaluatie

caching

De eerste stap resolutie is een ingesloten stap waar node.js de bestandsmethoden enz. Berekent in de tweede die wordt geladen, node haalt de code binnen de huidige methode. Bij het inpakken verpakt de code binnen de bewerking zoals hoger weergegeven en stuurt deze naar VM voor evaluatie, zodat deze uiteindelijk in de cache wordt opgeslagen.

Dus in de eerste plaats is node zich nooit bewust van welke symbolen een commonJS-module gaat exporteren tot en tenzij de module echt wordt geëvalueerd. En dit is vaak het grootste onderscheid met ECMAScript-modules, als gevolg van ESM is lexicaal en dus zijn de geëxporteerde symbolen beter bekend voordat de code echt wordt geëvalueerd.

Wat is importeren?

Er is een voorstel van import () om ook geneste import-overzichten te vormen. In tegenstelling tot het lexicale importzoekwoord, wordt import () opereren op het moment of de analyse verwerkt (meer als vereist). De syntaxis is als volgt.

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

Wanneer de bijbehorende ESM-module wordt geparseerd, wordt voordat deze wordt geëvalueerd door de VM een ingesloten structuur gemaakt, een module-record genoemd. Als gevolg hiervan kan elke fout met betrekking tot het ongemak van een paar geëxporteerde afbeeldingen een blunder veroorzaken vóór de analyse.

Gebruik Cases

  • Modulebelasting op aanvraag is mogelijk.
  • Voorwaardelijke belasting van modules is uitvoerbaar
  • Een belofte zoals asynchrone afhandeling.

Importeer functies:

  • U gebruikt genoemde invoer om door selectie alleen de items te laden die u wilt. Wat zal geheugen besparen?
  • Import is asynchroon (en in de huidige ES6-modulelader is dat natuurlijk ook) en kan een tikje hoger presteren.
  • U gebruikt genoemde invoer om door selectie alleen de items te laden die u wilt. Wat zal geheugen besparen?
  • Import is asynchroon (en in de huidige ES6-modulelader is dat natuurlijk ook) en kan een tikje hoger presteren.
  • Importeren lijkt niet beschikbaar in Node vanwege versie 6.
  • Het zou echter beschikbaar zijn in toekomstige versies. Je gebruikt het tegenwoordig, met behulp van transpilers vergelijkbaar met Traceur Compiler, Babel of Rollup.

Vergelijking tussen kop en kop Vereist versus importeren (infographics)

Hieronder staan ​​de top 4 verschillen tussen Vereisen versus Importeren

Belangrijkste verschillen tussen vereisen versus importeren

Beide vereisen versus importeren zijn populaire keuzes in de markt; laten we enkele van de belangrijkste verschillen tussen Require versus Import bespreken:

  • Vereisen is meer van dynamische analyse en importeren is meer van statische analyse
  • Vereist Werpt fout tijdens runtime en Import gooit fout tijdens het parseren
  • Require is niet-klassiek en Import is Lexical
  • Vereist om te blijven waar ze het bestand hebben geplaatst en importen worden boven aan het bestand gesorteerd.
  • Importeren wordt altijd aan het begin van het bestand uitgevoerd en kan niet voorwaardelijk worden uitgevoerd. Anderzijds kan vereisen inline worden gebruikt, voorwaardelijk,

Vereisen versus importvergelijkingstabel

Zoals u kunt zien, zijn er veel vergelijkingen tussen Vereisen versus Importeren. Laten we hieronder naar de vergelijking kijken tussen Vereisen versus importeren

S. Nee.VereisenImporteren
1Syntaxis:

var dep = vereisen ("dep");

console.log (dep.bar);

dep.foo ();

Syntaxis:

import (foo, bar) uit "dep";

console.log (bar);

foo ();

2Omdat import in fase drie blijft en niet door native browsers wordt afgedwongen, kunnen we geen enkele uitvoering bekijken.Zodra u import in uw code gebruikt, wordt uw transpilers dit terug naar vereist, het commonJS-modelleringssysteem. Daarom is elk tegenwoordig hetzelfde.
3Hoewel er op dit moment geen prestatiewinst is, zal ik toch adviseren om import over vereist te gebruiken omdat het op het punt staat in JS te zijn en (net als gevolg van zijn native) hoger zal presteren dan vereist.Als gevolg van import is native daarom vereist niet hoger presteren in vergelijking met import
4U zult dynamisch laden waar de geladen modulenaam niet vooraf is gedefinieerd. Laden is synchroon. Dit betekent dat als u meerdere behoeften heeft, deze één voor één worden geladen en verwerkt. ES6U kunt benoemde invoer gebruiken om door selectie alleen de items te laden die u wilt. Wat zal geheugen besparen? Import is asynchroon (en in de huidige ES6-modulelader is dat natuurlijk ook) en kan een tikje hoger presteren. Ook is het vereiste modulesysteem meestal niet gebaseerd. Het is zeer onwaarschijnlijk dat het momenteel gebruikelijk wordt dat ES6-modules bestaan.

Conclusie - vereisen versus importeren

We hebben geleerd over een manier om Node.js-modules te produceren en in onze code te gebruiken. Met modules kunnen we eenvoudig code gebruiken. Ze bieden functionaliteit die geïsoleerd is van alternatieve modules. Een code is minder ingewikkeld om te beheren als deze eenmaal in kleine hapklare brokken zit. Dit is vaak de gedachte achter het behouden van functies voor slechts één taak of het hebben van bestanden die slechts een deel of een deel tegelijk bevatten. Als je een chique app hebt en door veel of duizenden regels code moet scrollen, wordt de taak van het debuggen of eenvoudigweg begrijpen van de app zo veel moeilijker.

Gelukkig helpt JavaScript ons hierbij met Import versus Require. U zult echter code in het ene bestand schrijven en die code delen, daarom kan het door een ander bestand of andere bestanden worden gebruikt. Ik hoop dat je nu een eerlijker idee hebt gekregen van zowel Import versus Require. Houd ons blog in de gaten voor meer artikelen zoals deze.

Aanbevolen artikel

Dit is een leidraad geweest voor de belangrijkste verschillen tussen Vereisen versus Importeren. Hier bespreken we ook de belangrijkste verschillen tussen Vereisen en importeren met infographics en vergelijkingstabel. U kunt ook de volgende artikelen bekijken voor meer informatie -

  1. Node.js versus PHP-prestaties
  2. Raspberry Pi 3 tegen Arduino
  3. C # Array versus lijst
  4. C ++ versus doelstelling C
  5. C ++ Vector vs Array: Wat te verkiezen
  6. C ++ versus Visual C ++: wat de beste is