Node.js nima? Brauzer JavaScript dan farqi, qayerda ishlatiladi
Muammodan boshlaylik
2009 yilgacha JavaScript faqat brauzerda ishlardi. Ya'ni siz JavaScript yozardingiz — u faqat Chrome, Firefox, Safari ichida hayot ko'rardi. Server tomonda? Yo'q. Fayl o'qish? Yo'q. Ma'lumotlar bazasiga ulanish? Yo'q.
Dasturchilar server uchun boshqa tillarni ishlatardi — PHP, Java, Python, Ruby. JavaScript esa faqat "sahifani chiroyli qilish" uchun edi.
Lekin 2009 yilda Ryan Dahl degan dasturchi bir savol berdi:
"JavaScript brauzerda ishlaydi. Uni brauzerdan chiqarib, mustaqil ishlatsa bo'lmaydimi?"
Shu savol — Node.js ning tug'ilishiga sabab bo'ldi.
Node.js nima?
Node.js — bu JavaScript ni brauzerdan tashqarida ishlatish imkonini beruvchi muhit. Uni oddiyroq qilib tushuntirsak:
Brauzer JavaScript uchun bir "uy" bo'lsa — Node.js boshqa bir "uy". Xuddi shu til, lekin boshqa muhit. Boshqa imkoniyatlar.
Node.js o'zi ikki katta qismdan iborat:
V8 Engine — Google Chrome ning JavaScript dvigateli (engine). JavaScript kodini o'qiydi va mashina kodiga aylantiradi. Node.js bu dvigatelni Chrome dan ajratib olib, mustaqil ishlatgan.
libuv — C++ da yozilgan kutubxona. Fayl tizimi, tarmoq, asinxron operatsiyalar — bularni hal qiladi. Node.js ning asosi desa bo'ladi.
Node.js
├── V8 Engine → JavaScript ni tushunadi va ishlatadi
└── libuv → Fayl, tarmoq, asinxron operatsiyalar
Brauzer JavaScript va Node.js — farqlari
Ko'pchilik "JavaScript bu JavaScript, farqi yo'q" deb o'ylaydi. Bu noto'g'ri. Bir xil til, lekin muhit boshqa — demak imkoniyatlar ham boshqa.
Brauzerda nima bor, Node.js da yo'q?
// Brauzerda ishlaydi, Node.js da YO'Q
document.getElementById("btn"); // DOM yo'q
window.location.href; // window yo'q
localStorage.setItem("key", "val"); // localStorage yo'q
alert("Salom!"); // alert yo'q
Brauzerda DOM bor — sahifadagi elementlarni boshqarish uchun. Node.js da sahifa yo'q, shuning uchun DOM ham yo'q.
Node.js da nima bor, brauzerda yo'q?
// Node.js da ishlaydi, brauzerda YO'Q
const fs = require("fs");
fs.readFileSync("fayl.txt"); // fayl o'qish
const os = require("os");
os.cpus(); // protsessor ma'lumotlari
process.env.DATABASE_URL; // muhit o'zgaruvchilar
process.argv; // buyruq qatori argumentlari
Node.js da fayl tizimi bor — fayllarni o'qib, yozib, o'chirib bo'ladi. Brauzerda bu imkon yo'q — tasavvur qiling, har qanday sayt sizning kompyuteringizdagi fayllarni o'qisa...
Qisqacha jadval:
| Imkoniyat | Brauzer | Node.js |
|---|---|---|
| DOM boshqarish | ✅ | ❌ |
| Fayl tizimi | ❌ | ✅ |
| window ob'ekti | ✅ | ❌ |
| process ob'ekti | ❌ | ✅ |
| localStorage | ✅ | ❌ |
| HTTP server yaratish | ❌ | ✅ |
| Ma'lumotlar bazasi | ❌ | ✅ |
| Tarmoq operatsiyalar | Cheklangan | ✅ |
Node.js qayerda ishlatiladi?
Backend va API server
Bu — Node.js ning eng asosiy ishlatilishi. Siz mobil ilova yoki veb sayt uchun backend yozmoqchisiz — Node.js eng mashhur tanlovlardan biri.
const http = require("http");
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: "Salom dunyo!" }));
});
server.listen(3000, () => {
console.log("Server 3000-portda ishlamoqda");
});
Bu oddiy HTTP server. Brauzerda http://localhost:3000 ga kirsangiz — { "message": "Salom dunyo!" } ko'rasiz. Buni yozish uchun Node.js dan boshqa hech narsa kerak emas.
Real-time ilovalar
Chat, onlayn o'yin, real-time bildirishnomalar — bular uchun Node.js juda mos. Sababi Node.js asinxron ishlaydi — minglab foydalanuvchi bir vaqtda ulanib tursa ham server qotib qolmaydi.
WhatsApp, Slack, Trello — bularning backend qismlari Node.js da yozilgan.
CLI asboblar
Terminalda ishlaydigan buyruqlar — bu ham Node.js. Siz har kuni ishlatadigan:
npm install express
npx create-react-app my-app
nest new my-project
Bularning hammasi Node.js da yozilgan CLI asboblar.
Mikroservislar
Katta loyihalar ko'plab kichik xizmatlarga bo'linadi. Har bir xizmat mustaqil ishlaydi. Node.js ning yengilligi va tezligi bu yerda juda qo'l keladi.
Streaming
Netflix, YouTube — video streaming uchun Node.js ishlatadi. Katta faylni bir yo'la yuborish o'rniga — bo'laklarga bo'lib, stream qilib yuborish. Node.js bu ishni juda yaxshi qiladi.
Node.js ning kuchli tomonlari
Asinxron va Non-blocking
Bu Node.js ning eng katta kuchi. Boshqa tillar — masalan PHP — har bir so'rov uchun alohida thread ochadi. 1000 ta so'rov kelsa — 1000 ta thread. Bu xotira va protsessorni ko'p iste'mol qiladi.
Node.js esa bitta thread bilan ishlaydi. Lekin asinxron mexanizm tufayli — bitta thread 1000 ta so'rovni ham boshqara oladi. Qanday? Bir so'rov kutayotganda — masalan, ma'lumotlar bazasidan javob — Node.js kutib o'tirmaydi, boshqa so'rovga o'tadi.
JavaScript — frontend va backend
Eng katta afzallik — frontend va backend uchun bir xil til. Siz React da frontend yozdingiz, Node.js da backend yozasiz — bir xil til, bir xil sintaksis.
Bu degani:
- Bitta dasturchi ikkalasini ham yoza oladi
- Kod, funksiya, mantiqni ikki tomon o'rtasida ulashish mumkin
- O'rganish osonroq — yangi til o'rganish shart emas
npm ekotizimi
npm — Node Package Manager. Dunyo bo'ylab dasturchilar yozgan millionlab tayyor kutubxonalar. Xohlagan narsani — email yuborish, PDF yaratish, to'lov tizimi — tayyor kutubxona topasiz.
npm install nodemailer # email yuborish
npm install sharp # rasm qayta ishlash
npm install stripe # to'lov tizimi
Node.js ning zaif tomonlari
Har bir texnologiyaning o'z cheklovi bor. Node.js ham istisno emas.
CPU intensive vazifalar uchun mos emas
Node.js bitta thread da ishlaydi. Agar siz juda og'ir hisoblash — masalan, video konvertatsiya, kriptografiya, sun'iy intellekt — qilsangiz, o'sha hisoblash tugamaguncha boshqa hech narsa ishlamaydi. Server qotib qoladi.
Bu holat uchun Python, Go yoki worker_threads ishlatiladi.
Callback va asinxron murakkablik
Asinxron kod yozish boshida qiyin tuyuladi. Callback Hell — bu haqiqiy muammo edi. Hozir async/await bilan yaxshilandi, lekin hali ham e'tibor kerak.
Kim Node.js ishlatadi?
Node.js "kichik loyihalar uchun" emas:
- Netflix — streaming platformasi, Node.js ga o'tgandan keyin startup vaqti 70% kamaygan
- LinkedIn — mobil backend ni Ruby dan Node.js ga o'tkazdi, server soni 30 dan 3 ta ga tushdi
- Uber — real-time haydovchi va yo'lovchi moslash tizimi Node.js da
- PayPal — to'lov tizimi, Java dan Node.js ga o'tkazdi
- NASA — astronavtlar ma'lumotlarini saqlash tizimi
Xulosa
Node.js — JavaScript ni brauzerdan chiqarib, server tomonida ishlatish imkonini beruvchi muhit. V8 Engine va libuv uning ikkita asosi. Brauzer JavaScript dan farqi — DOM yo'q, lekin fayl tizimi, tarmoq, process bor.
Real-time ilovalar, API server, CLI asboblar, mikroservislar — bularning hammasi uchun Node.js mos. Bitta til — frontend va backend. Bu uning eng katta kuchi.
Keyingi dars
2-dars: O'rnatish — Node.js, nvm, versiyalarni boshqarish