Kas iš tikrųjų yra „Node.js“?

„Node.js“ yra „JavaScript“ vykdymo laiko aplinka. Skamba puikiai, bet ką tai reiškia? Kaip tai veikia?

„Node.js“ vykdymo laiko aplinka apima viską, ko reikia norint paleisti programą, parašytą „JavaScript“.

„Node.js“ atsirado tada, kai originalūs „JavaScript“ kūrėjai išplėtė jį nuo to, ką galite paleisti tik naršyklėje, iki to, ką galite paleisti savo kompiuteryje kaip atskirą programą.

Dabar naudodamiesi „JavaScript“ galite padaryti daug daugiau nei tik padaryti svetaines interaktyvias.

„JavaScript“ dabar gali atlikti tai, ką gali padaryti kitos scenarijų kalbos, pvz., „Python“.

Tiek jūsų naršyklės „JavaScript“, tiek „Node.js“ veikia V8 „JavaScript“ vykdymo metu. Šis variklis paima jūsų „JavaScript“ kodą ir paverčia jį greitesniu mašinos kodu. Mašinos kodas yra žemo lygio kodas, kurį kompiuteris gali paleisti nereikalaudamas jo iš anksto aiškinti.

Kodėl „Node.js“?

Štai oficialus apibrėžimas, pateiktas oficialioje „Node.js“ svetainėje:

„Node.js®“ yra „JavaScript“ vykdymo laikas, sukurtas „Chrome“ V8 „JavaScript“ variklyje.

„Node.js“ naudoja įvykių valdomą, neužblokuojantį įvesties / išvesties modelį, kuris daro jį lengvą ir efektyvų.

„Node.js“ paketų ekosistema „npm“ yra didžiausia atvirojo kodo bibliotekų ekosistema pasaulyje.

Mes jau aptarėme pirmąją šio apibrėžimo eilutę: „Node.js® yra„ JavaScript “vykdymo laikas, sukurtas„ Chrome “V8„ JavaScript “variklyje.“ Dabar supraskime kitas dvi eilutes, kad galėtume sužinoti, kodėl „Node.js“ yra toks populiarus.

I / O reiškia įvestį / išvestį. Tai gali būti viskas, pradedant vietinių failų skaitymu / rašymu ir baigiant HTTP užklausos pateikimu į API.

Įvestis / išvestis užima laiko ir todėl blokuoja kitas funkcijas.

Apsvarstykite scenarijų, kai mes prašome užpakalinės duomenų bazės, kad gautumėte išsamią informaciją apie user1 ir user2, tada atspausdinkite jas ekrane / konsolėje. Atsakymas į šią užklausą užtrunka, tačiau abi vartotojo duomenų užklausas galima vykdyti savarankiškai ir tuo pačiu metu.

I / O blokavimas

Taikant blokavimo metodą, vartotojo2 duomenų užklausa nepradedama, kol vartotojo1 duomenys nebus atspausdinti ekrane.

Jei tai būtų žiniatinklio serveris, turėtume pradėti naują giją kiekvienam naujam vartotojui. Tačiau „JavaScript“ yra vienos gijos (ne iš tikrųjų, bet jis turi vienos gijos įvykių ciklą, kurį aptarsime šiek tiek vėliau). Taigi tai padarytų „JavaScript“ nelabai tinkančią užduotims, turinčioms daug sričių.

Štai kur atsiranda neužblokuojanti dalis.

Neužblokuojantis I / O

Kita vertus, naudodamiesi neužblokuojančia užklausa, galite inicijuoti duomenų „user2“ užklausą nelaukdami atsakymo į „user1“ užklausą. Abi užklausas galite inicijuoti lygiagrečiai.

Šis neužblokuojantis įvestis / išvestis nereikalauja kelių gijų, nes serveris vienu metu gali tvarkyti kelias užklausas.

„JavaScript“ įvykių ciklas

Jei turite 26 minutes, žiūrėkite šį puikų „Node Event Loop“ vaizdo įrašo paaiškinimą:

Kitu atveju čia pateikiamas greitas žingsnis po žingsnio paaiškinimas, kaip veikia „JavaScript“ įvykių ciklas.

  1. Stumkite main()ant skambučių kamino.
  2. Stumkite console.log()ant skambučių kamino. Tai iškart bėga ir pasirodo.
  3. Stumkite setTimeout(2000)ant kamino. setTimeout(2000)yra mazgo API. Kai tai vadiname, užregistruojame įvykio ir atgalinio ryšio porą. Įvykis laukia 2000 milisekundžių, tada funkcija bus skambinimas.
  4. Užregistravę jį API, setTimeout(2000)pasirodys iš skambučių kamino.
  5. Dabar antrasis setTimeout(0)registruojamas tuo pačiu būdu. Dabar turime dvi „Node“ API, kurios laukia vykdymo.
  6. Palaukus 0 sekundžių, setTimeout(0)jis perkeliamas į atgalinio skambučio eilę ir tas pats nutinka setTimeout(2000).
  7. Atgalinio skambučio eilėje funkcijos laukia, kol skambučių krūva bus tuščia, nes tik vienas sakinys gali atlikti laiką. Tuo rūpinasi įvykių kilpa.
  8. Paskutiniai console.log()paleidimai ir main()skambučiai iškilo iš skambučių kamino.
  9. Įvykio ciklas mato, kad skambučių krūva yra tuščia, o atgalinio ryšio eilė nėra tuščia. Taigi jis perkelia atgalinius skambučius (tvarka „pirmas į pirmąjį“) į skambučių kaminą vykdymui.

npm

Tai yra nuostabios bendruomenės sukurtos bibliotekos, kurios išspręs daugumą jūsų bendrų problemų. „npm“ („Node“ paketų tvarkyklė) yra paketai, kuriuos galite naudoti savo programose, kad jūsų kūrimas būtų greitesnis ir efektyvesnis.

Reikalauti

Reikalauti atlieka tris veiksmus:

  • Jis įkelia modulius, kurie pateikiami kartu su „Node.js“, pvz., Failų sistema ir HTTP iš „Node.js“ API.
  • Tai įkelia trečiųjų šalių bibliotekas, tokias kaip „Express“ ir „Mongoose“, kurias įdiegiate nuo npm.
  • Tai leidžia jums reikalauti savo failų ir moduliuoti projektą.

Reikalauti yra funkcija, ji priima parametrą „kelias“ ir grąžina module.exports.

Mazgo moduliai

Mazgo modulis yra daugkartinis kodo blokas, kurio egzistavimas netyčia neturi įtakos kitam kodui.

Galite parašyti savo modulius ir naudoti juos įvairiose programose. „Node.js“ turi įmontuotų modulių rinkinį, kurį galite naudoti be tolesnio diegimo.

„V8“ įkrauna „JavaScript“ naudodamas „C ++“

V8 yra atvirojo kodo vykdymo variklis, parašytas C ++.

„JavaScript“ -> V8 (C ++) -> Mašinos kodas

V8 įgyvendina scenarijų, vadinamą ECMAScript, kaip nurodyta ECMA-262. „ECMAScript“ sukūrė „Ecma International“, kad standartizuotų „JavaScript“.

V8 gali veikti atskirai arba gali būti įdėtas į bet kurią C ++ programą. Jame yra kabliukų, kurie leidžia jums parašyti savo C ++ kodą, kurį galite padaryti prieinamu „JavaScript“.

Tai iš esmės leidžia jums pridėti „JavaScript“ funkcijų, įterpiant V8 į C ++ kodą, kad jūsų C ++ kodas suprastų daugiau nei tai, ką kitaip nurodo ECMAScript standartas.

Redaguoti: Kaip atkreipė mano dėmesį Gregas Bulmashas, ​​be „Chrome“ V8 yra daugybė skirtingų „JavaScript“ vykdymo laiko variklių, tokių kaip „SpiderMonkey“, „Mozilla“, „Chakra“, „Microsoft“ ir kt. Išsamesnę informaciją apie tai galite rasti šiame puslapyje.

Įvykiai

Kažkas nutiko mūsų programoje, į kurį galime atsakyti. „Node“ yra dviejų tipų įvykiai.

  • Sistemos įvykiai: C ++ šerdis iš bibliotekos, vadinamos libuv. (Pvz., Baigėte skaityti failą).
  • Pasirinktiniai įvykiai: „JavaScript“ pagrindas.

„Hello World“ rašymas „Node.js“

Mes turime tai padaryti, ar ne?

Sukurkite failą app.js ir pridėkite jį prie jo.

console.log("Hello World!");

Atidarykite savo mazgo terminalą, pakeiskite katalogą į aplanką, kuriame išsaugotas failas, ir paleiskite node app.js.

Bam - ką tik parašei „Hello World“ iš Node.js

Sekite @ Priyesh_p18

Yra daugybė išteklių, kuriuos galite naudoti, kad sužinotumėte daugiau apie „Node.js“, įskaitant „freeCodeCamp.org“.