Node.js nima? Brauzer JavaScript dan farqi, qayerda ishlatiladi

~15 daq · Node.js · Kirish va Asoslar

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