Hvad er nøjagtigt Node.js?

Node.js er et JavaScript-runtime-miljø. Det lyder godt, men hvad betyder det? Hvordan fungerer det?

Node.js-kørselsmiljøet indeholder alt hvad du behøver for at udføre et program skrevet i JavaScript.

Node.js opstod, da de oprindelige udviklere af JavaScript udvidede det fra noget, du kun kunne køre i browseren til noget, du kunne køre på din maskine som et enkeltstående program.

Nu kan du gøre meget mere med JavaScript end bare at gøre websteder interaktive.

JavaScript har nu evnen til at gøre ting, som andre scripting-sprog som Python kan gøre.

Både din browser JavaScript og Node.js kører på V8 JavaScript runtime-motoren. Denne motor tager din JavaScript-kode og konverterer den til en hurtigere maskinkode. Maskinkode er lavniveau-kode, som computeren kan køre uden først at skulle fortolke den.

Hvorfor Node.js?

Her er en formel definition som angivet på det officielle Node.js-websted:

Node.js® er en JavaScript-runtime bygget på Chromes V8 JavaScript-motor.

Node.js bruger en hændelsesdrevet, ikke-blokerende I / O-model, der gør den let og effektiv.

Node.js 'pakkeøkosystem, npm, er det største økosystem af open source-biblioteker i verden.

Vi diskuterede allerede den første linje i denne definition: "Node.js® er en JavaScript-runtime bygget på Chromes V8 JavaScript-motor." Lad os nu forstå de to andre linjer, så vi kan finde ud af, hvorfor Node.js er så populær.

I / O refererer til input / output. Det kan være alt lige fra læsning / skrivning af lokale filer til indgivelse af en HTTP-anmodning til en API.

I / O tager tid og blokerer derfor andre funktioner.

Overvej et scenario, hvor vi anmoder om en backend-database for detaljerne om bruger1 og bruger2 og derefter udskrive dem på skærmen / konsollen. Svaret på denne anmodning tager tid, men begge brugerdata-anmodningerne kan udføres uafhængigt og på samme tid.

Blokering af I / O

I blokeringsmetoden initieres ikke bruger2s dataanmodning, før brugerens data er udskrevet på skærmen.

Hvis dette var en webserver, skulle vi starte en ny tråd for hver ny bruger. Men JavaScript er single-threaded (ikke rigtig, men det har en single-threaded event loop, som vi vil diskutere lidt senere). Så dette ville gøre JavaScript ikke særlig velegnet til multi-threaded opgaver.

Det er her, den ikke-blokerende del kommer ind.

Ikke-blokerende I / O

På den anden side kan du ved hjælp af en ikke-blokerende anmodning starte en dataanmodning til bruger2 uden at vente på svaret på anmodningen om bruger1. Du kan starte begge anmodninger parallelt.

Denne ikke-blokerende I / O eliminerer behovet for multi-threading, da serveren kan håndtere flere anmodninger på samme tid.

JavaScript-hændelsesløkken

Hvis du har 26 minutter, skal du se denne fremragende videoforklaring af Node Event Loop:

Ellers er her en hurtig trin-for-trin forklaring på, hvordan JavaScript Event Loop fungerer.

  1. Skub main()ind på opkaldstakken.
  2. Skub console.log()ind på opkaldstakken. Dette løber derefter med det samme og bliver poppet.
  3. Skub setTimeout(2000)på stakken. setTimeout(2000)er en Node API. Når vi kalder det, registrerer vi parret begivenhed-tilbagekald. Begivenheden venter 2000 millisekunder, så er tilbagekald funktionen.
  4. Efter at have registreret det i API'erne, setTimeout(2000)poppes det fra opkaldsstakken.
  5. Nu bliver det andet setTimeout(0)registreret på samme måde. Vi har nu to Node API'er, der venter på at udføre.
  6. Efter at have ventet i 0 sekunder, setTimeout(0)flyttes til tilbagekaldskøen, og det samme sker med setTimeout(2000).
  7. I tilbagekaldskøen venter funktionerne på, at opkaldsstakken er tom, fordi kun en erklæring kan udføre ad gangen. Dette er taget hånd om af begivenhedsløkken.
  8. Den sidste console.log()løber, og de main()bliver poppet fra opkaldstakken.
  9. Begivenhedssløjfen ser, at opkaldstakken er tom, og tilbagekaldskøen ikke er tom. Så det flytter tilbagekaldene (i en først-i-først-ud-rækkefølge) til opkaldstakken til udførelse.

npm

Dette er biblioteker bygget af det fantastiske samfund, der løser de fleste af dine generiske problemer. npm (Node pakkehåndtering) har pakker, du kan bruge i dine apps for at gøre din udvikling hurtigere og effektiv.

Kræve

Kræv gør tre ting:

  • Det indlæser moduler, der følger med Node.js som filsystem og HTTP fra Node.js API.
  • Det indlæser tredjepartsbiblioteker som Express og Mongoose, som du installerer fra npm.
  • Det giver dig mulighed for at kræve dine egne filer og modulere projektet.

Kræv er en funktion, og den accepterer en parameter "sti" og returnerer module.exports.

Node-moduler

Et nodemodul er en genanvendelig blok af kode, hvis eksistens ikke ved et uheld påvirker anden kode.

Du kan skrive dine egne moduler og bruge det i forskellige applikationer. Node.js har et sæt indbyggede moduler, som du kan bruge uden yderligere installation.

V8 turboladning af JavaScript ved at udnytte C ++

V8 er en open source runtime-motor skrevet i C ++.

JavaScript -> V8 (C ++) -> Maskinkode

V8 implementerer et script kaldet ECMAScript som specificeret i ECMA-262. ECMAScript blev oprettet af Ecma International for at standardisere JavaScript.

V8 kan køre enkeltstående eller kan integreres i ethvert C ++ - program. Det har kroge, der giver dig mulighed for at skrive din egen C ++ - kode, som du kan stille til rådighed for JavaScript.

Dette giver dig i det væsentlige mulighed for at tilføje funktioner til JavaScript ved at integrere V8 i din C ++ - kode, så din C ++ - kode forstår mere end hvad ECMAScript-standarden ellers specificerer.

Rediger: Som opmærksom på mig af Greg Bulmash, er der mange forskellige JavaScript-runtime-motorer bortset fra V8 fra Chrome som SpiderMonkey fra Mozilla, Chakra af Microsoft osv. Detaljer om det samme kan findes på denne side.

Begivenheder

Noget der er sket i vores app, som vi kan svare på. Der er to typer begivenheder i Node.

  • Systembegivenheder: C ++ kerne fra et bibliotek kaldet libuv. (F.eks. Færdig med at læse en fil).
  • Tilpassede begivenheder: JavaScript-kerne.

Skriv Hello World i Node.js

Vi er nødt til at gøre dette, ikke?

Opret en fil app.js og tilføj følgende til den.

console.log("Hello World!");

Åbn din node-terminal, skift biblioteket til den mappe, hvor filen gemmes og køres node app.js.

Bam - du har lige skrevet Hello World i Node.js.

Følg @ Priyesh_p18

Der er masser af ressourcer, du kan bruge til at lære mere om Node.js, herunder freeCodeCamp.org.