Node.js — Chrome uchun yaratilgan V8 JavaScript engine asosida JavaScript kodini brauzerdan tashqarida bajaradigan ochiq kodli runtime muhitidir. U server, command-line vosita, build pipeline va avtomatlashtirish dasturlarini yozishda ishlatiladi. Node.js til emas; JavaScript tili, V8 engine, native API va event loopni bir muhitda taqdim etadi.
Event loop
Node.js JavaScript callbacklarini odatda bitta asosiy threadda bajaradi. Tarmoq va boshqa I/O amallari operatsion tizim yoki libuv orqali kuzatiladi. Amal tayyor bo‘lganda callback navbatga qo‘yiladi va event loop tegishli bosqichda uni bajaradi.
Bu model har connection uchun alohida thread ochmasdan ko‘p I/O ulanishini boshqarishga yordam beradi. Ammo JavaScript ichidagi uzoq CPU hisob event loopni bloklaydi va boshqa requestlar javobsiz kutadi. Og‘ir hisob worker thread, child process yoki alohida xizmatga ajratiladi.
Asinxron API
Callback Node.jsning dastlabki asinxron modelidir. Promise va async/await ketma-ket oqimni tushunarliroq yozadi.
import { readFile } from 'node:fs/promises';
const text = await readFile('config.json', 'utf8');
Await butun processni emas, joriy async funksiya davom etishini kutadi. Bir-biriga bog‘liq bo‘lmagan amallarni ketma-ket await qilish ortiqcha latency keltirishi mumkin; nazoratli parallel Promise ishlatiladi.
Module tizimi
Node.js CommonJS (require, module.exports) va ECMAScript Modules (import, export) tizimlarini qo‘llaydi. Fayl kengaytmasi, package’dagi type maydoni va Node versiyasi qaysi rejim ishlashini belgilaydi. Ikki modul tizimi orasidagi interoperability qoidalari aynan bir xil emas.
Package resolution node_modules, package exports va boshqa metadata asosida dependency topadi. package-lock.json yoki mos lockfile aniq dependency versiyalarini takrorlanuvchi o‘rnatish uchun saqlaydi.
Stream va buffer
Buffer binary ma’lumotni xotirada saqlaydi. Stream katta fayl yoki tarmoq oqimini kichik bo‘laklarda qayta ishlaydi. Readable, writable, duplex va transform stream turlari mavjud. Backpressure consumer sekin bo‘lsa producerning cheksiz buffer to‘plashini cheklaydi.
Faylni to‘liq RAMga o‘qish kichik faylda sodda, katta upload yoki video uchun xavfli. Pipeline stream xatolari va yopilishini birgalikda boshqaradi.
Process va xatolar
Environment variable runtime konfiguratsiyasini beradi. Signal qabul qilinganda server yangi connectionni to‘xtatib, faol ishlarni tugatib graceful shutdown qilishi mumkin. Unhandled exceptiondan keyin process holati noma’lum bo‘lishi mumkin; log yozilib, process supervisor orqali toza restart qilinadi.
Node.js ichki HTTP server beradi, Express va boshqa frameworklar routing hamda middleware qo‘shadi. Productionda timeout, request size, permission, dependency audit va observability alohida sozlanadi.
Event loop kechikishi
Event loop lag rejalashtirilgan callbackning amalda qancha kech bajarilganini ko‘rsatadi. CPUga og‘ir loop, juda katta JSON parse yoki sinxron filesystem API bu kechikishni oshiradi. Server request rate past bo‘lsa ham bitta katta amal barcha connectionga ta’sir qilishi mumkin. Monitoring event loop delay histogramini CPU, garbage collection va request latency bilan bog‘laydi. Worker thread memory’ni avtomatik umumiy qilmaydi; structured clone, transferable buffer yoki SharedArrayBuffer orqali ma’lumot almashadi. Worker yaratish ham xarajatli, shu sababli pool va ish hajmi nazorat qilinadi.
Runtime va package versiyasi production hamda developmentda bir xil diapazonda saqlanadi; aks holda modul yoki API xatti-harakati farqlanishi mumkin.
Bog‘liq tushunchalar
JavaScript, V8, event loop, libuv, npm, stream, asynchronous programming