Što je zapravo Node.js?

Node.js je JavaScript runtime okruženje. Zvuči sjajno, ali što to znači? Kako to funkcionira?

Izvršno okruženje Node.js uključuje sve što je potrebno za izvršavanje programa napisanog na JavaScript-u.

Node.js je nastao kada su ga izvorni programeri JavaScript-a proširili s nečega što ste mogli pokretati samo u pregledniku na nešto što možete pokretati na svom računalu kao samostalnu aplikaciju.

Sada s JavaScriptom možete učiniti puno više od pukog stvaranja interaktivnih web stranica.

JavaScript sada može raditi stvari koje mogu raditi i drugi skriptni jezici poput Pythona.

I JavaScript i Node.js vašeg preglednika rade na V8 JavaScript runtime engineu. Ovaj stroj uzima vaš JavaScript kôd i pretvara ga u brži strojni kôd. Strojni kôd je kod niske razine koji računalo može pokretati bez potrebe da ga prvo tumači.

Zašto Node.js?

Evo formalne definicije kako je dana na službenom web mjestu Node.js:

Node.js® je JavaScript radno vrijeme izgrađeno na Chromeovom V8 JavaScript mehanizmu.

Node.js koristi I-O model koji ne blokira i upravlja događajima, što ga čini laganim i učinkovitim.

Paketni ekosustav Node.js, npm, najveći je ekosustav biblioteka otvorenog koda na svijetu.

Već smo razgovarali o prvom retku ove definicije: "Node.js® je JavaScript vrijeme izvođenja izgrađeno na Chromeovom V8 JavaScript mehanizmu." Sada ćemo razumjeti ostala dva retka kako bismo mogli saznati zašto je Node.js tako popularan.

I / O se odnosi na ulaz / izlaz. To može biti sve, od čitanja / pisanja lokalnih datoteka do postavljanja HTTP zahtjeva do API-ja.

Ulazno-izlazni postupak zahtijeva vrijeme i na taj način blokira ostale funkcije.

Razmotrimo scenarij u kojem tražimo pozadinsku bazu podataka za detalje user1 i user2, a zatim ih ispisujemo na zaslon / konzolu. Odgovor na ovaj zahtjev traje, ali oba zahtjeva za korisničkim podacima mogu se provesti neovisno i istodobno.

Blokiranje U / I

U metodi blokiranja, zahtjev korisnika2 za podacima ne pokreće se dok se podaci korisnika1 ne ispišu na zaslon.

Da je ovo web poslužitelj, morali bismo pokrenuti novu nit za svakog novog korisnika. Ali JavaScript je jednonitni (ne baš, ali ima jednonitnu petlju događaja, o čemu ćemo nešto kasnije razgovarati). Dakle, ovo bi JavaScript učinilo neprikladnim za zadatke s više niti.

Tu dolazi neblokirajući dio.

Neblokirajući I / O

S druge strane, koristeći neblokirajući zahtjev, možete pokrenuti zahtjev za podacima za korisnika2 bez čekanja odgovora na zahtjev za korisnika1. Oba zahtjeva možete pokretati paralelno.

Ovaj ne-blokirajući I / O eliminira potrebu za višestrukim navojem jer poslužitelj može istovremeno obrađivati ​​više zahtjeva.

Petlja događaja JavaScript

Ako imate 26 minuta, pogledajte ovo izvrsno video objašnjenje petlje događaja čvora:

U suprotnom, evo kratkog detaljnog objašnjenja kako funkcionira JavaScript petlja događaja.

  1. Pritisnite main()na skup poziva.
  2. Pritisnite console.log()na skup poziva. To onda odmah trči i iskače.
  3. Pritisnite setTimeout(2000)na stog. setTimeout(2000)je Node API. Kad ga nazovemo, registriramo par događaj-povratni poziv. Događaj će pričekati 2000 milisekundi, tada je funkcija povratni poziv.
  4. Nakon registracije u API-ima, setTimeout(2000)iskače iz snopa poziva.
  5. Sada se drugi setTimeout(0)registrira na isti način. Sada imamo dva Node API-ja koja čekaju na izvršenje.
  6. Nakon čekanja od 0 sekundi, setTimeout(0)premješta se u red povratnih poziva, a isto se događa i sa setTimeout(2000).
  7. U redu povratnih poziva, funkcije čekaju da se stek poziva isprazni, jer samo jedan izraz može izvršiti vrijeme. Za to se brine petlja događaja.
  8. Posljednji se console.log()pokreće, a main()dobiva se iskače iz niza poziva.
  9. Petlja događaja vidi da je skup poziva prazan, a red povratnih poziva nije prazan. Dakle, premješta povratne pozive (redoslijedom koji je prvi-prvi-izašao) u skup poziva za izvršenje.

npm

To su knjižnice koje je izgradila nevjerojatna zajednica koja će riješiti većinu vaših generičkih problema. npm (upravitelj paketa čvorova) sadrži pakete koje možete koristiti u svojim aplikacijama kako bi vaš razvoj bio brži i učinkovitiji.

Zahtijevaj

Zahtijeva tri stvari:

  • Učitava module koji dolaze u paketu s Node.js poput datotečnog sustava i HTTP-a iz Node.js API-ja.
  • Učitava biblioteke trećih strana poput Expressa i Mongoosea koje instalirate od npm.
  • Omogućuje vam zahtijevanje vlastitih datoteka i modulariziranje projekta.

Zahtjev je funkcija koja prihvaća parametar "put" i vraća se module.exports.

Moduli čvorova

Node modul je blok koda za višekratnu upotrebu čije postojanje slučajno ne utječe na drugi kôd.

Možete pisati vlastite module i koristiti ih u raznim aplikacijama. Node.js ima skup ugrađenih modula koje možete koristiti bez daljnje instalacije.

V8 turbo-puni JavaScript korištenjem C ++

V8 je pokretački mehanizam otvorenog koda napisan na C ++.

JavaScript -> V8 (C ++) -> Strojni kod

V8 implementira skriptu nazvanu ECMAScript kako je navedeno u ECMA-262. ECMAScript je stvorio Ecma International kako bi standardizirao JavaScript.

V8 može raditi samostalno ili se može ugraditi u bilo koju C ++ aplikaciju. Ima kuke koje vam omogućuju pisanje vlastitog C ++ koda koji možete učiniti dostupnim JavaScriptu.

To vam u osnovi omogućuje dodavanje značajki JavaScriptu ugrađivanjem V8 u vaš C ++ kôd, tako da vaš C ++ kôd razumije više od onoga što inače navodi standard ECMAScript.

Uredi: Kako mi je skrenuo pažnju Greg Bulmash, postoji mnogo različitih JavaScript runtime motora, osim V8 Chrome-a, poput SpiderMonkey Mozille, Chakra Microsofta itd. Pojedinosti istih mogu se naći na ovoj stranici.

Događaji

Nešto što se dogodilo u našoj aplikaciji na što možemo odgovoriti. U Nodeu postoje dvije vrste događaja.

  • Sistemski događaji: C ++ jezgra iz biblioteke koja se zove libuv. (Na primjer, završeno čitanje datoteke).
  • Prilagođeni događaji: jezgra JavaScript.

Pisanje Hello World u Node.js

Moramo to učiniti, zar ne?

Napravite datoteku app.js i dodajte joj sljedeće.

console.log("Hello World!");

Otvorite terminal čvora, promijenite direktorij u mapu u kojoj je datoteka spremljena i pokrenuta node app.js.

Bam - upravo si napisao Hello World na Node.js.

Slijedite @ Priyesh_p18

Postoji mnoštvo resursa koje možete koristiti kako biste saznali više o Node.js, uključujući freeCodeCamp.org.