Node.js nima? V8 va libuv bilan qanday qurilgan
Assalamu Aleykum bugun Nodejs haqida bafurcha gaplashamiz. Nodejs nima u ? Hozir hamma asynchronous event-driven Javascript runtime yoki chromening v8 engine ustiga qurilgan javascript runtime deb javob beradi.Bu bir to'da chiroyli mano anglatmaydigan qiyin so'zlar to'plami birlashtirib aytishday tuyuladi .Javascript engine nima ?event-drivenchi ?asynchronous bunisi nima endi yana bittasi bor ekan v8? Nima o'zi bular ?Buni hammasini bilish va tushunish uchun Nodejs yaratilish sababidan toki nimalardan iboratligigacha to'liq ko'rib chiqamiz.
Spoiler:Bu maqola Nodejs single thread yoki multi threadligiga yoki event loopdagi tasklar tartibiga qaratilmagan.
Disclaimer :Bu maqolada nodeJs kodlarga murojaat qilishimiz mumkin va bazi c++ kodlarni ko'rishimiz mumkin (c++ni bilish talab qilinmaydi).
Xo'sh boshidan boshlaymiz processorlar faqatgina mashina kodini ya'ni 0 va 1 larni tushunadi .Mashina kodidan yuqorida assembly tili bo'ladi va assembleru kodni 0 va 1 larga o'giradi .Yana bir pog'ona tepaga chiqsak bizni C va C++ kutib oladi. Bu tillar orqali operatison sistema va hardwaregaruxsat olishimiz mumkin. Ular compilerorqali assembly kodiga o'tadi va undan 0 va 1 ga . Yana bir pog'ona tepaga chiqsak JavaScriptva Python bo'ladi. Odatda bu tillarda hardwarega ruxsat bo'lmaydi. Masalan Javascript orqali fayllarga ruhsat ololmaysiz .Shuning uchun Javascripthigh level dasturlash tili hisoblanadi .
Compiler haqida ko'proq ma'lumot uchun maqola.
Tepadagi bu maqoladan so'ng C++ kodi qanday 0 va 1 ga o'tishi haqida tushunchaga ega bo'ldik .
Endi Javascriptga qaytsak biz javascript kod yozganda uni qandaydir qilib 0 va 1 larga o'tkazishimiz zarur aks holda kompyuter uni tushunmaydi.Buni qanday qilamiz ? Buni qilish uchun biga**Javascript engine** kerak bo'ladi . U biz yozgan js kodni mashina kodiga o'giradi . Bizda bir necha Javascript enginelar bor **SpiderMonkey ,**Chromedagi V8esa eng tezlaridan biri va u 2008 yil Google tomonidan taqdim qilingan.Biz v8 bu Javascript engine ekanligini bilib oldik.
V8 haqida
V8haqida biroz gaplashamiz ,v8 bu googlening open source Javascript va Webassymbly engine proekti(C++ da yozilgan). V8ni alohida bir o'zini hamda boshqa c++ dasturlari bilan birgalikda birlashtirib ishga tushurish mumkin . Bu nima degani ekan ? Bu siz yozgan c++ kod bilan v8 kodni birgalikda run qilish mumkin va unda v8ning barcha xususiyatlari va sizning kodingizdagi logika birga bo'ladi.
V8ni kompyuter run qilish uchun o'zining saytida ko'rishingiz mumkin.

Ko'rib turganingizdek if va boshqa funksiyalarga bizda endi ruxsat bor qani document objectini olib ko'raylikchi reference errror qanday qilib buni doim ishlatamizku ? yoki require funksiyani ishlatib ko'raylikchi bu ham yoqku ?Nega doim ishlatgan narsalarimiz v8da yoq? document obyekti va require funksiyasi yoqligini sabab ular chrome va Nodejsda v8 bilan qo'shilib ishga tushurilgan boshqa c++ kodlarida.Biz buni yordamida yangi funksiyalar yaratib uni v8ga qo'shib ketishimiz mumkin.
Odatda biz yozgan funksiyalar v8 orqali c++ funksiyalariga ulangan bo'ladi bu bilan nima demoqchiman . Siz masalan doSomething(content) funksiyani ishga tushirmoqchisiz va bu **v8.bind("doSomething", do)**orqali
do bu yerda c++ funksiya bo'lib v8 biz bergan funksiya orqali o'zida bor nomlangan funksiyalarni ichidan qidirib xuddi shu nomga bog'lanagan c++ funksiyasini ishga tushurib beradi.Xuddi shu orqali Javascriptda bo'lmagan os level ishlarni c++ga topshirib yuboriladi.
Endi buni Nodejs source kodlari orqali ko'rib chiqamiz.
global->Set(isolate, "print", v8::FunctionTemplate::New(isolate, Print));
global->Set(isolate, "timeout", v8::FunctionTemplate::New(isolate, timer.Timeout));
global->Set(isolate, "thread", v8::FunctionTemplate::New(isolate, MyThread::Thread));shunga o'xshash c++ kodlari Javascriptga ulanadi.

Tepadagi rasmda compressBytes funksiyasi ulanishini nodejs source kodidan ko'rishingiz mumkin link.
Nodejs saytiga o'tsangiz ushbu sahifaga qarang link.Ko'proq ma'lumot uchun sahifaga kiring.

Bu yerda Nodejs qaysi kutubxonalardan tashkil topganligini ko'rishimiz mumkin .Bu yerdagilar eng muhim kutubxonalar bu V8 va Libuv .Biz v8 haqida ma'lumotga ega bo'ldik libuv nima ekan.
Fun fact : Agar nodejs source kodni ko'rsangiz u yerda bir qancha js fayllariniyam ko'rishingiz mumkin v8 bularni c++ fayllari bilan birgalikda ishlashiga yordam beradi (bind qiladi bo'glaydi ) . Bulardan biri fs,event module ular jsda yozilgan va biz js modulini import qilamiz.
libuv
Libuv bu Nodejsni yuragi bo'lgan event loop bor kutubxona.Nodejs yaratishdan maqsad bu serverda ishlaydigan network applicationlarni yaratishga yordam berish .Shuning uchun javascript o'zi qila olmaydigan narsalarni Nodejs yordamida qila olishi kerak.Bular misoliga fayllarni o'qish ,processorlar bilan gaplashish, database serverlar bilan muloqot qilish va albatta tarmoqdan kelgan so'rovlar bilan ishlay olishi zarur.Bu aytilgan ishlarning ko'p qismi ushbu libuv kutubxonasi orqali amalga oshiriladi. Libuv bu C da Nodejs yaratuvchilari tomonidan yozilgan .
Tassavur qiling sizda kompyuter bor bunda CPU. Ram xotira network card bor network card bu internetga ulanishga yordam beradigan qism.bularni ustida operatsion sistema turadi va u bularni bir biriga va bizni dastur bilan kompyuterni bog'lab turadi .Va operatsion sistemaning ustiga processlar qurilgan unda bir necha processlar bo'ladi hozir biz faqat Nodejs haqida to'xtalamiz.
processlarni yaxshiroq bilish uchun ushbu maqolamni o'qishingiz mumkin.
libuv bizga nimaga yordam beradi biz faylni o'qishni xohladik siz ushbu kodni yozdingiz :
const fs = require("node:fs");
fs.readFile("/Users/joe/test.txt", "utf8", (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});Bu yerda v8 readfile funksiyasini topishga harakat qiladi va v8 binding orqali libuv APIlariga ulangan bo'ladi u libuviga o'tib libuvdan operatsion sistemaga beradi va operatsion sistema uni xotiradan qidirib topib nodejs processga va u libuvga va u qaytib v8ga beradi va u callbackni ishga tushuradi . Bu holat event driven programming deyiladi .Bu qanday amalga oshyapti : "sen faylni o'qi o'qib bo'lganingdan so'ng ayt man undan keyingi callback funksiyani ishga tushiraman" degani.

Nodejs o'rnatganda nimalar bo'ladi
Agarda Nodejs saytiga kirsangiz u sizga 3 xil narsa taklif qiladi source kodni , binary fayl hamda tayyor nodejs.Bularning farqi siz source kodni build qilish orqali binary faylga ega bo'lasiz va bu ishlatayotgan Nodejs. Xo'sh unda yuklab oladigan Nodejs nima u shu fayl bilan birgalikda pathni to'g'rilaydigan configuratsiyalar bo'ladi .Bu bizaga nodeni doimiy ishlatish uchun pathga nodeni binary faylini qo'shib qo'yadi , yani biz teminalda node deb chaqirganda xuddi shu path ishga tushadi va u borib node faylni ishga tushuradi.
Xulosa
Xulosa qilib aytadigan bo'lsak Nodejs faqatgina javascriptning o'zi bo'lmay u V8 va Libuv kabi kutubxonalar birlashgan holda Javascript kodini mashina tiliga o'girishga yordam beradigan dastur.
E'tiboringiz uchun rahmat !!!