Какво точно е Node.js?

Node.js е среда за изпълнение на JavaScript. Звучи страхотно, но какво означава това? Как става това?

Средата за изпълнение на Node.js включва всичко необходимо за изпълнение на програма, написана на JavaScript.

Node.js възникна, когато първоначалните разработчици на JavaScript го разшириха от нещо, което можете да стартирате само в браузъра, до нещо, което можете да стартирате на вашата машина като самостоятелно приложение.

Сега можете да направите много повече с JavaScript, отколкото просто да направите уебсайтовете интерактивни.

JavaScript вече има възможността да прави неща, които могат да правят други скриптови езици като Python.

Както JavaScript на вашия браузър, така и Node.js се изпълняват на V8 JavaScript runtime engine. Този механизъм взема вашия JavaScript код и го преобразува в по-бърз машинен код. Машинният код е код от ниско ниво, който компютърът може да изпълнява, без да е необходимо първо да го интерпретира.

Защо Node.js?

Ето официално определение, дадено на официалния уебсайт Node.js:

Node.js® е време за изпълнение на JavaScript, изградено върху V8 JavaScript двигателя на Chrome.

Node.js използва управляван от събития, неблокиращ I / O модел, който го прави лек и ефективен.

Пакетната екосистема на node.js, npm, е най-голямата екосистема с библиотеки с отворен код в света.

Вече обсъдихме първия ред на тази дефиниция: „Node.js® е изпълнение на JavaScript, изградено върху JavaScript двигателя на V8 на Chrome.“ Сега нека разберем другите два реда, за да можем да разберем защо Node.js е толкова популярен.

I / O се отнася за вход / изход. Това може да бъде всичко, вариращо от четене / писане на локални файлове до отправяне на HTTP заявка до API.

I / O отнема време и по този начин блокира други функции.

Помислете за сценарий, при който искаме база данни за подробности за потребител1 и потребител2 и след това ги отпечатваме на екрана / конзолата. Отговорът на тази заявка отнема време, но и двете заявки за потребителски данни могат да се извършват независимо и едновременно.

Блокиране на I / O

При метода за блокиране заявката за данни на user2 не се инициира, докато данните на user1 не бъдат отпечатани на екрана.

Ако това беше уеб сървър, ще трябва да стартираме нова нишка за всеки нов потребител. Но JavaScript е с една нишка (всъщност не, но има еднопоточен цикъл на събития, който ще обсъдим малко по-късно). Така че това би направило JavaScript не особено подходящ за многонишкови задачи.

Тук влиза неблокиращата част.

Неблокиращ I / O

От друга страна, използвайки неблокираща заявка, можете да инициирате заявка за данни за потребител2, без да чакате отговора на заявката за потребител1. Можете да инициирате и двете заявки паралелно.

Този неблокиращ I / O елиминира необходимостта от многопоточност, тъй като сървърът може да обработва множество заявки едновременно.

Цикълът за събития на JavaScript

Ако имате 26 минути, гледайте това отлично видео обяснение на Node Event Loop:

В противен случай ето кратко обяснение стъпка по стъпка как работи цикълът на събития на JavaScript.

  1. Натиснете main()върху стека повиквания.
  2. Натиснете console.log()върху стека повиквания. След това се изпълнява веднага и се появява.
  3. Натиснете setTimeout(2000)върху стека. setTimeout(2000)е API на Node. Когато го извикаме, регистрираме двойка събитие-обратно повикване. Събитието ще изчака 2000 милисекунди, след което обратното повикване е функцията.
  4. След като го регистрирате в API, setTimeout(2000)се изскача от стека на повикванията.
  5. Сега вторият setTimeout(0)се регистрира по същия начин. Сега имаме два API на Node, които чакат да се изпълнят.
  6. След изчакване 0 секунди setTimeout(0)се премества в опашката за обратно повикване и същото се случва с setTimeout(2000).
  7. В опашката за обратно повикване функциите изчакват стека на повикванията да бъде празен, защото само един оператор може да изпълни време. За това се грижи цикълът на събитията.
  8. Последният се console.log()изпълнява и main()изскачането се появява от стека на повикванията.
  9. Цикълът на събитията вижда, че стекът повиквания е празен и опашката за обратно извикване не е празна. Така той премества обратните обаждания (в ред първо в първото излизане) в стека на повикванията за изпълнение.

npm

Това са библиотеки, създадени от страхотната общност, която ще реши повечето от вашите общи проблеми. npm (Node package manager) има пакети, които можете да използвате във вашите приложения, за да направите вашето развитие по-бързо и ефективно.

Изисквайте

Изисква прави три неща:

  • Той зарежда модули, които се доставят в комплект с Node.js като файлова система и HTTP от Node.js API.
  • Той зарежда библиотеки на трети страни като Express и Mongoose, които инсталирате от npm.
  • Позволява ви да имате собствени файлове и да модулирате проекта.

Require е функция и тя приема параметър “path” и се връща module.exports.

Възелни модули

Модулът Node е блок за многократна употреба, чието съществуване не повлиява случайно друг код.

Можете да пишете свои собствени модули и да го използвате в различни приложения. Node.js има набор от вградени модули, които можете да използвате без допълнителна инсталация.

V8 с турбо зареждане на JavaScript чрез използване на C ++

V8 е механизъм за изпълнение с отворен код, написан на C ++.

JavaScript -> V8 (C ++) -> Машинен код

V8 изпълнява скрипт, наречен ECMAScript, както е посочено в ECMA-262. ECMAScript е създаден от Ecma International за стандартизиране на JavaScript.

V8 може да работи самостоятелно или може да бъде вграден във всяко приложение на C ++. Той има куки, които ви позволяват да напишете свой собствен C ++ код, който можете да направите достъпен за JavaScript.

Това по същество ви позволява да добавяте функции към JavaScript, като вграждате V8 във вашия C ++ код, така че вашият C ++ код да разбира повече от това, което стандартът ECMAScript указва по друг начин.

Редактиране: Както беше насочен на вниманието ми от Грег Булмаш, има много различни двигатели за изпълнение на JavaScript, освен V8 от Chrome, като SpiderMonkey от Mozilla, Чакра от Microsoft и др. Подробности за същото можете да намерите на тази страница.

Събития

Нещо, което се е случило в нашето приложение, на което можем да отговорим. Има два вида събития в Node.

  • Системни събития: C ++ ядро ​​от библиотека, наречена libuv. (Например завършено четене на файл).
  • Персонализирани събития: Ядро на JavaScript.

Писане Hello World в Node.js

Трябва да направим това, нали?

Направете файл app.js и добавете следното към него.

console.log("Hello World!");

Отворете своя терминален възел, променете директорията в папката, където файлът е записан и стартиран node app.js.

Бам - току-що написахте Hello World в Node.js.

Следвайте @ Priyesh_p18

Има много ресурси, които можете да използвате, научете повече за Node.js, включително freeCodeCamp.org.