Какво е Node.js? Това среда ли е? Време за изпълнение ли е? Език ли е, какво е? Това са всички онези неща. По принцип това е среда за изпълнение на JavaScript извън браузъра. Създаден е от Ryan Dhal през 2009 г. Това е среда за изпълнение с отворен код и когато казвам време за изпълнение, мисля за изпълним файл. Това е хост среда за изпълнение на JavaScript код от страната на сървъра.
Така че, ако пишем код в bash, ние сме в bash runtime. Ако пишем код в Ruby, ние сме в Ruby runtime. Това е като собствено време за изпълнение, собствена среда, която е самокапсулирана. Построен е на Chrome’s V8 JavaScript engine
.
Ако не знаете какъв е двигателят V8 на Chrome, почти всеки браузър има собствен JavaScript двигател, който анализира и изпълнява JavaScript. Енджинът на Chrome се нарича V8 и това е само техният компилатор, който те използват, за да компилират JavaScript до машинен код, така че действителната машина да може да го прочете. V8 е един от най-добрите там. Създателят на Node реши да го извади от Chrome, да го изтръгне и да го постави на друго място. Ето защо можем да напишем Node.js в JavaScript, защото е изграден на същия двигател.
Node.js архитектура
Node.js използва архитектурата Single Threaded Event Loop
за работа с множество едновременни клиенти. Моделът за обработка на Node се основава на JavaScript event-based model
заедно с JavaScript callback mechanism.
Има няколко предимства на тази архитектура.
- С използването на
Event Queue and Thread Pool
сървърът Node.js позволява ефективна обработка на голям брой входящи заявки. - Цикълът на събития обработва всички заявки една по една, така че няма нужда да създавате множество нишки. Вместо това, една нишка е достатъчна за обработка на блокираща входяща заявка.
- Node.js сървърът през повечето време изисква по-малко ресурси и памет поради начина, по който обработва входящите заявки. Тъй като заявките се обработват една по една, цялостният процес става по-малко натоварващ паметта.
Браузър срещу възел
Както казах, и двете са JavaScript. Chrome използва V8, Node използва V8, но има някои разлики като технологиите, какво може да се направи и начина, по който мислите за нещата. Така че нека поговорим за това мислене.
За браузъри е за създаване на интерактивни приложения за мрежата. Визуални неща, които хората виждат и кликват върху тях и взаимодействат с тях. Node не е за това, няма визуална графика. Тук няма нищо визуално, имаме терминал, това е. Можем да мислим за Node буквално като за чиста логика. Няма UI, няма CSS. Няма анимации, това е просто чиста логика.
Има глобален обект, наречен window
за JavaScript код в браузъра. В Node няма прозорец, но има усещане за global object
. Така че нека поговорим за глобалните.
По принцип Node ни дава полезни глобали. Ще говорим за няколко от тях и те са много, но това са едни от най-важните.
Единият се казва process
. Той включва неща за машината, колко ядра има, нейното име, пътища и местоположения, променливи на средата. Всички различни видове неща, които този процес би имал. И ще се промени в зависимост от това на каква машина работи вашето приложение
Require
е друг важен, вероятно най-важният. Това е функция за намиране и използване на модули в текущия модул. Ще говорим за модулите по-късно в тази статия. Node.js използва нещо, наречено CommonJS
. Това е модел на модул, който някой е създал преди много време и Node.js го е приел. И начинът, по който бихте го използвали, е, че трябва да съберете модул в текущия модул, като използвате функцията за изискване.
Това е версията на JavaScript за импортиране, тя се нарича просто изискване. Или трябва да кажа, че това е версията на Node за импортиране, която се нарича изискване.
Модули в Node.js
Модулът в Node.js е проста или сложна функционалност, организирана в един или множество JavaScript файлове, които могат да се използват повторно в приложението Node.
Всеки модул в Node.js има свой собствен контекст, така че не може да пречи на други модули или да замърсява глобалния обхват. Освен това всеки модул може да бъде поставен в отделен .js файл в отделна папка.