Mi is pontosan a Node.js?

A Node.js egy JavaScript futásidejű környezet. Remekül hangzik, de mit jelent ez? Hogyan működik?

A Node.js futási környezet mindent tartalmaz, amelyre szükség van egy JavaScript-ben írt program futtatásához.

A Node.js akkor jött létre, amikor a JavaScript eredeti fejlesztői kiterjesztették valamiről, amelyet csak a böngészőben futtathattak, olyanra, amelyet önálló alkalmazásként futtathattak a gépen.

Most sokkal többet tehet a JavaScript-szel, mint a weboldalak interaktívvá tételét.

A JavaScript most már képes olyan dolgokra, amelyeket más szkriptnyelvek, például a Python is képesek megtenni.

Mind a böngészője, mind a Node.js a V8 JavaScript futási motoron fut. Ez a motor átveszi a JavaScript kódot, és átalakítja gyorsabb gépi kódgá. A gépkód alacsony szintű kód, amelyet a számítógép futtathat anélkül, hogy először kellene értelmeznie.

Miért Node.js?

A hivatalos Node.js webhelyen megadott formális meghatározás itt található:

A Node.js® egy olyan JavaScript futásidejű alkalmazás, amely a Chrome V8 JavaScript-motorjára épül.

A Node.js eseményvezérelt, nem blokkoló I / O modellt használ, amely könnyűvé és hatékonnyá teszi.

A Node.js csomag-ökoszisztémája, az npm, a világ legnagyobb nyílt forráskódú könyvtárainak ökoszisztémája.

Már megvitattuk ennek a meghatározásnak az első sorát: „A Node.js® egy JavaScript futásidejű program, amely a Chrome V8 JavaScript-motorjára épül. Most értsük meg a másik két sort, így megtudhatjuk, miért olyan népszerű a Node.js.

Az I / O a bemenetre / kimenetre vonatkozik. Ez bármi lehet, a helyi fájlok olvasásától / írásától kezdve a HTTP-kérés API-ig történő elkészítéséig.

Az I / O időbe telik, ezért blokkol más funkciókat.

Vizsgáljunk meg egy olyan forgatókönyvet, ahol egy backend adatbázist kérünk a user1 és a user2 részleteihez, majd kinyomtatjuk őket a képernyőn / konzolon. A válasz erre a kérésre időbe telik, de mindkét felhasználói adatkérés függetlenül és egyszerre hajtható végre.

I / O blokkolása

A blokkolási módszerben a user2 adatigénylése addig nem indul, amíg a user1 adatait ki nem nyomtatja a képernyőre.

Ha ez egy webszerver volt, akkor minden új felhasználó számára új szálat kell indítanunk. De a JavaScript egyszálú (valójában nem, de rendelkezik egyszálú eseményhurokkal, amelyet egy kicsit később megbeszélünk). Tehát ettől a JavaScript nem lenne túl alkalmas többszálas feladatokra.

Ott jön be a nem blokkoló rész.

Nem blokkoló I / O

Másrészt egy nem blokkoló kérés használatával kezdeményezhet adatkérést a user2 számára anélkül, hogy megvárná a választ a user1 kérésre. Mindkét kérést párhuzamosan kezdeményezheti.

Ez a nem blokkoló I / O kiküszöböli a többszálas menetek szükségességét, mivel a szerver egyszerre több kérést is képes kezelni.

A JavaScript eseményhurok

Ha van 26 perced, nézd meg a Node Event Loop kiváló videó magyarázatát:

Ellenkező esetben itt van egy gyors, lépésről lépésre bemutatott magyarázat a JavaScript Event Loop működéséről.

  1. Tolja main()a híváskötegre.
  2. Tolja console.log()a híváskötegre. Ez aztán azonnal fut, és felbukkan.
  3. Tolja setTimeout(2000)rá a veremre. setTimeout(2000)egy Node API. Amikor felhívjuk, regisztráljuk az esemény-visszahívás párost. Az esemény 2000 ezredmásodpercet vár, majd a visszahívás a funkció.
  4. Miután regisztrálta az API- setTimeout(2000)kba, megjelenik a hívásveremből.
  5. Most a másodikat setTimeout(0)ugyanúgy regisztrálják. Most két Node API vár a végrehajtásra.
  6. 0 másodperc várakozás után setTimeout(0)a visszahívási sorba kerül, és ugyanaz történik setTimeout(2000).
  7. A visszahívási sorban a függvények megvárják, amíg a hívásverem üres lesz, mert csak egy utasítás képes végrehajtani egy idõt. Erről az eseményhurok gondoskodik.
  8. Az utolsó console.log()futások, és a main()lekérdezések a hívásveremből pattannak ki.
  9. Az eseményhurok látja, hogy a hívásverem üres és a visszahívási sor nem üres. Tehát a visszahívásokat (az első az elsőben-előbb sorrendben) a híváskötegbe mozgatja végrehajtás céljából.

npm

Ezek olyan könyvtárak, amelyeket a félelmetes közösség épített fel, és amelyek megoldják a legtöbb általános problémát. Az npm (Node csomagkezelő) csomagokat tartalmaz, amelyeket az alkalmazásaiban használhat a fejlesztés gyorsabbá és hatékonyabbá tételéhez.

Igényelje

A Require három dolgot tesz:

  • Olyan modulokat tölt be, amelyek a Node.js-hez (például fájlrendszerhez és HTTP-hez) kapcsolódnak, a Node.js API-ból.
  • Olyan harmadik fél könyvtárakat tölt be, mint az Express és a Mongoose, amelyeket npm-től telepít.
  • Ez lehetővé teszi a saját fájlok igénylését és a modul modulálását.

A Require egy függvény, amely elfogadja az „path” paramétert és visszatér module.exports.

Csomópont modulok

A Node modul egy újrafelhasználható kódblokk, amelynek létezése nem véletlenül érinti más kódot.

Megírhatja saját moduljait, és felhasználhatja különféle alkalmazásokban. A Node.js beépített modulokkal rendelkezik, amelyeket minden további telepítés nélkül használhat.

A V8 a C ++ alkalmazásával felturbózza a JavaScriptet

A V8 egy C ++ nyelven írt, nyílt forráskódú futásidejű motor.

JavaScript -> V8 (C ++) -> Gépkód

A V8 egy ECMAScript nevű szkriptet hajt végre, az ECMA-262 előírásoknak megfelelően. Az ECMAScriptet az Ecma International hozta létre a JavaScript szabványosítása érdekében.

A V8 önállóan futtatható, vagy beágyazható bármely C ++ alkalmazásba. Olyan horgokkal rendelkezik, amelyek lehetővé teszik saját C ++ kódjának megírását, amelyet elérhetővé tehet a JavaScript számára.

Ez lényegében lehetővé teszi funkciók hozzáadását a JavaScript-hez azzal, hogy beágyazza a V8-at a C ++ kódjába, hogy a C ++ -kód többet értsen, mint amit az ECMAScript szabvány külön meghatároz.

Szerkesztés: Amire Greg Bulmash felhívta a figyelmemet, a Chrome V8-on kívül számos különféle JavaScript futásidejű motor létezik, mint például a SpiderMonkey a Mozilla, a Chakra a Microsoft stb. Ugyanezen részletek ezen az oldalon találhatók.

Események

Valami, ami történt az alkalmazásunkban, amire válaszolni tudunk. Kétféle esemény van a Node-ban.

  • Rendszeresemények: C ++ mag a libuv nevű könyvtárból. (Például befejezte a fájlolvasást).
  • Egyéni események: JavaScript mag.

Hello World írása a Node.js fájlban

Ezt meg kell tennünk, nem?

Készítsen egy app.js fájlt, és adja hozzá a következőket.

console.log("Hello World!");

Nyissa meg a csomópont terminált, cserélje a könyvtárat arra a mappára, ahová a fájlt mentette, és futtassa node app.js.

Bam - most írtad a Hello World -et a Node.js-ben.

Kövesse @ Priyesh_p18

Rengeteg erőforrás használható, amelyekkel többet megtudhat a Node.js-ről, beleértve a freeCodeCamp.org-ot is.