1-bo‘lim

Node.js bilan tanishuv

Node.js ni kim va nima uchun yaratgan, nomi qayerdan kelgan, brauzerdagi JavaScript dan farqi va bloklamaydigan kirish-chiqish nima.

🕑 11 daqiqa o‘qish 📄 984 so‘z 👁 1 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Birinchi dastur
  2. Brauzer va Node farqi
  3. Nomi qayerdan kelgan
  4. Uni kim yaratgan
  5. Vaqt chizig'i
  6. Bloklamaydigan kirish-chiqish
  7. Node qayerda ishlatiladi
  8. V8 va libuv
  9. Versiyani tekshirish
  10. Xulosa

Node.js - JavaScript ni brauzerdan tashqarida ishlatish imkonini beradigan muhit. U bilan server, buyruq qatori vositasi yoki fayllar bilan ishlaydigan dastur yozish mumkin.

Bu darslik siz JavaScript ni bilasiz deb hisoblaydi. Agar hali o'rganmagan bo'lsangiz, avval JavaScript asoslari darsligidan boshlang.

Birinchi dastur #

JavaScript
const shahar = "Namangan";
const asosiy = Number(process.versions.node.split(".")[0]);

console.log(`Salom, ${shahar}!`);
console.log("Node versiyasi katta:", asosiy >= 18);
Natija
Salom, Namangan!
Node versiyasi katta: true

Faylni salom.js deb saqlab, shunday ishga tushirasiz:

Terminal
node salom.js

console.log tanish, lekin process - yangi. U brauzerda yo'q.

Brauzer va Node farqi #

Brauzerda borNode da bor
window, documentprocess, global
DOM va hodisalarFayl tizimi (fs)
localStorageMuhit o'zgaruvchilari
Sahifa bilan cheklanganButun kompyuterga kirish

Ikkalasida ham bir xil narsa: til. const, map, async/await, sinflar - hammasi aynan bir xil ishlaydi.

JavaScript
console.log(typeof window);
console.log(typeof document);
console.log(typeof process);
console.log(typeof globalThis);
Natija
undefined
undefined
object
object
Node da DOM yo'q

Brauzer uchun yozilgan kodni Node ga ko'chirsangiz va u document.querySelector ishlatsa, dastur darhol to'xtaydi.

Buning teskarisi ham to'g'ri: fs moduli brauzerda yo'q - veb-sahifa foydalanuvchining fayllarini o'qiy olmasligi kerak.

Ikkalasida ham ishlaydigan kod yozmoqchi bo'lsangiz, faqat tilning o'zidan foydalaning: globalThis - ikkalasida ham mavjud bo'lgan yagona global nom.

Nomi qayerdan kelgan #

Nega "Node"

Rayan Dal loyihani dastlab web.js deb atagan - u oddiy veb-server yozmoqchi edi.

Lekin ish davom etgani sari maqsad kengaydi: bu faqat veb-server emas, balki tarmoqdagi istalgan dasturni yozish uchun muhit edi.

Shunda nom ham o'zgardi. G'oya shunday: har bir Node dasturi - tarmoqdagi bitta tugun (node). Katta tizim ko'p tugundan yig'iladi, ular esa bir-biri bilan aloqa qiladi.

.js qo'shimchasi esa bu JavaScript ekanini bildiradi.

Uni kim yaratgan #

Node

Rayan Dal (1981-)

Node.js ning yaratuvchisi. Amerikalik dasturchi. U Node ni 2009-yil noyabrda Berlindagi `JSConf EU` anjumanida birinchi marta namoyish qilgan.

Uni bitta muammo bezovta qilardi: o'sha davr serverlari har bir ulanish uchun alohida **oqim** (thread) ajratardi. Ming foydalanuvchi - ming oqim, va har biri xotira yeydi. Bundan tashqari, server fayldan o'qiyotganda o'sha oqim shunchaki **kutib** turardi.

Uning javobi: bitta oqim, lekin hech qachon kutmaydigan. Buni 12-bo'limda emas, aynan quyida ko'ramiz.

Dal 2012-yilda loyihadan chetlashdi va keyinroq o'z tajribasidan kelib chiqib Deno muhitini yaratdi.

npm

Ayzek Shlyuter

npm ning yaratuvchisi. 2010-yilda u Node uchun paket menejerini yozdi - bugun dunyodagi eng katta ochiq kod ombori.

Aynan npm Node ning tarqalishiga sabab bo'ldi: begona kodni ishlatish bitta buyruqqa aylandi. Uni 4-bo'limda o'rganamiz.

Vaqt chizig'i #

Node.js ning rivojlanishi 2009 Taqdimot JSConf EU 2010 npm paket ombori 2015 io.js qaytdi jamg'arma tuzildi 2019 OpenJS jamg'armasi 2025 Node 24 LTS Juft raqamli versiyalar uzoq qo'llab-quvvatlanadi (LTS), toq raqamlilar esa yangiliklarni sinash uchun
io.js nima edi

2014-yilda Node jamoasida kelishmovchilik chiqdi: rivojlanish juda sekin ketayotgani va qarorlar bitta kompaniya qo'lida ekani ko'pchilikni qoniqtirmasdi.

Bir guruh ishlab chiquvchilar loyihaning nusxasini olib, uni io.js deb atashdi va tezroq rivojlantira boshlashdi.

Ajralish uzoqqa cho'zilmadi. 2015-yilda ikki loyiha qayta birlashdi va mustaqil Node.js Foundation tuzildi - endi hech bir kompaniya yakka hokim emas edi. 2019-yilda u OpenJS Foundation ga aylandi.

Shuning uchun Node ning versiyalari 0.12 dan keyin darhol 4.0 ga sakragan: io.js allaqachon 3.x da edi.

Bloklamaydigan kirish-chiqish #

Node ning asosiy g'oyasi shu. Uni ko'rib chiqamiz.

JavaScript
import { readFile } from "node:fs/promises";

console.log("1. fayl so'raldi");

const vada = readFile(new URL(import.meta.url));

console.log("2. bu qator kutmadi");

const mazmun = await vada;
console.log("3. fayl keldi, bo'sh emas:", mazmun.length > 0);
Natija
1. fayl so'raldi
2. bu qator kutmadi
3. fayl keldi, bo'sh emas: true

Ikkinchi qator fayl o'qilishini kutmadi. Node so'rovni operatsion tizimga topshirdi va darhol keyingi ishga o'tdi.

Endi bloklaydigan shaklini ko'ramiz:

JavaScript
import { readFileSync } from "node:fs";

console.log("1. fayl so'raldi");

const mazmun = readFileSync(new URL(import.meta.url));

console.log("2. bu qator kutdi");
console.log("3. fayl bo'sh emas:", mazmun.length > 0);
Natija
1. fayl so'raldi
2. bu qator kutdi
3. fayl bo'sh emas: true

Tartib bir xil ko'rinadi, lekin ichkarida katta farq bor: bu safar ikkinchi qator fayl to'liq o'qilgunicha umuman ishlamadi.

Uchta so'rov, ikki xil server Har ulanishga bitta oqim 1-oqim: ish kutmoqda 2-oqim: ish kutmoqda 3-oqim: ish kutmoqda uchta oqim, ko'p xotira, ko'p vaqt bekorga kutishda Node: bitta oqim 1-so'rov 2-so'rov 3-so'rov kutish operatsion tizimga topshirildi javoblar tayyor bo'lgani sari qaytariladi bitta oqim, kam xotira, kutish yo'q Node kutishni o'zi bajarmaydi - uni tizimga topshiradi va shu vaqtda boshqa so'rovlarni qabul qilaveradi buning ichki mexanizmini 7-bo'limda ko'ramiz
Bitta oqim degani - uni bloklab qo'yish mumkin

Node ning kuchi ham, zaifligi ham shu: bitta asosiy oqim.

Kutish (fayl, tarmoq, ma'lumotlar bazasi) hech narsa turmaydi - u tizimga topshiriladi.

Lekin hisob boshqacha. Agar kodingiz bir soniya davomida uzluksiz hisoblasa, o'sha soniyada server hech kimga javob bera olmaydi - hamma foydalanuvchi kutib turadi.

Shuning uchun Node og'ir hisob uchun eng yaxshi tanlov emas. Uning o'rni - ko'p kutish va kam hisob bo'lgan ishlar: API, veb-server, fayllar bilan ishlash. Aynan veb-xizmatlarning ko'pchiligi shunday.

Node qayerda ishlatiladi #

QayerdaNima uchun
REST va GraphQL APIKo'p so'rov, kam hisob
Real vaqt ilovalariChat, bildirishnoma, o'yin
Buyruq qatori vositalarinpm, eslint, vite
Front-end qurishBundlerlar Node da ishlaydi
MikroservislarTez ishga tushadi, kam xotira

Diqqat qiling: front-end dasturchi bo'lsangiz ham, Node ni allaqachon ishlatgansiz. React, Vue yoki Vite loyihasini qurish - bu Node da ishlaydigan dastur.

V8 va libuv #

Node nimadan yasalgan

Node - til emas, balki muhit. U ikki katta qismdan yig'ilgan:

  1. V8 - Google ning JavaScript dvigateli, Chrome da ham ishlatiladi. U kodni o'qiydi va mashina tiliga aylantiradi.
  2. libuv - C tilida yozilgan kutubxona. U hodisalar sikli va bloklamaydigan kirish-chiqishni ta'minlaydi.

libuv aynan Node uchun yozilgan, keyinchalik esa alohida loyihaga ajratilgan va boshqa tillar ham undan foydalanadi.

Bundan tashqari Node standart kutubxonani beradi: fs, http, path, crypto va boshqalar. Ularning ko'pi C++ da yozilgan va JavaScript ga ochilgan.

Versiyani tekshirish #

JavaScript
const [asosiy] = process.versions.node.split(".").map(Number);

console.log("Node 18 dan yangimi:", asosiy >= 18);
console.log("V8 mavjud:", typeof process.versions.v8 === "string");
console.log("Platformalardan biri:",
    ["linux", "darwin", "win32"].includes(process.platform));
Natija
Node 18 dan yangimi: true
V8 mavjud: true
Platformalardan biri: true
Nega aniq versiya chiqarilmadi

process.versions.node sizda boshqacha bo'ladi - masalan 22.14.0. Agar shuni chiqarsak, bu darslikdagi kutilgan natija sizda mos kelmasdi.

Shuning uchun bu darslikdagi hamma misol barqaror natija beradi: o'zgaruvchan qiymatlar o'rniga taqqoslash natijasi chiqariladi.

Xuddi shu sabab bilan bu yerda hech qachon Math.random(), Date.now() yoki papkadagi fayllar tartibi to'g'ridan-to'g'ri chop etilmaydi.

Amaliy topshiriq
  1. Node ni o'rnatib, node --version bilan tekshiring.
  2. salom.js faylini yozib, node salom.js bilan ishga tushiring.
  3. console.log(typeof window) yozib, natijani ko'ring.
  4. process.platform va process.versions ni chiqaring.
  5. Brauzerdagi document ga murojaat qilib, xatoni o'qing.
  6. readFile bilan bloklamaydigan o'qishni sinang.
  7. Xuddi shuni readFileSync bilan qayta yozing.
  8. Ikkalasining tartibiga e'tibor bering.
  9. Node qaysi mashhur vositalarda ishlatilishini bilib oling.
  10. io.js tarixini qisqacha o'qing.

Xulosa #

  • Node.js - til emas, muhit: JavaScript ni brauzerdan tashqarida ishlatadi.
  • Uni Rayan Dal 2009-yilda yaratgan; sabab - har ulanishga bitta oqim ajratadigan serverlarning qimmatligi.
  • Nomi "tarmoqdagi bitta tugun" degan g'oyadan kelgan.
  • Node da window va document yo'q, lekin process va fs bor.
  • npm ni 2010-yilda Ayzek Shlyuter yozgan.
  • 2014-yilgi io.js ajralishi 2015-yilda birlashuv va mustaqil jamg'arma bilan yakunlandi.
  • Node bitta oqimda ishlaydi: kutishni tizimga topshiradi, lekin og'ir hisob butun serverni bloklaydi.
  • U V8 dvigateli va libuv kutubxonasi ustiga qurilgan.

Keyingi bo'limda Node ni o'rnatib, birinchi loyihani yaratamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.