Vue JS da Virtual DOM (Uz)
Tags: virtualdom, vue, dom, javascript
Published: 2024-04-17 09:16:52

## Kirish
**Virtual DOM nima va bizga qanday imkoniyatlarni taqdim etadi?** Bu savol interviyularda asosiy va doimiy beriladigan savollardan biri hisoblanib, yangilar uchun ba’zida biroz chalg’ituvchi hamda birmuncha murakkab ham bo’lib ko’rinadi. Ushbu blogda bu tushunchani biroz sodda usul va bazi amaliy namunalar yordamida yoritishga harakat qilaman.

Qani kettik🚀

Dastlab, haqiqiy DOM o’zi nima? Keling, shu savolga javob topaylik:

## DOM nima?
DOM (Document Object Model)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aiuyibyktq5ybzlzpixz.png)

**Document** — bu HTML hujjatimiz, **Object Model** — Obyekt ko’rinishidagi struktura, buni “daraxt” misolida tasavvur etishimiz mumkin.

> **DOM** — bu HTML hujjatimizda mavjud bo’lgan barcha elementlarning “daraxt” ko’rinishida tartiblangan strukturasi.

Keling ushbu rasmga nazar solaylik.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hanatnvg62kua06vupyx.png)

Veb sahifamiz brauzerga yuklanganda, brauzer yuqorida ko’rsatilgani kabi HTML elementlarimizdan tashkil topgan DOM’ni yaratadi. Biz mana shu DOM elementlari ustida turli xil amallar (elementlarni o’chirish, yangi element qo’shish, o’zgatirish va hokazo) ni amalga oshirishimiz mumkin bo’ladi. DOM ning biror elementi ustida bajarilgan amal, ushbu elementga telegishli barcha ichki elementlarning qaytadan yangilanishiga sabab bo’ladi va bu veb sahifamizning sekinlashishiga sabab bo’ladi. Mana shu holatda Virtual DOM asqotadi.

## VIRTUAL DOM nima?

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dinis80fv5dnr15urqe0.png)

Vue.JS misolida ko’rib chiqmiz.

> **Virtual DOM** — haqiqiy DOM ning virtual ko’rinishi ya’ni Vue.js yordamida hosil qilinadigan DOM namunasi bo’lib, veb sahifamizning tezligi va samaradorligini oshirishga yordam beradi.

Veb sahifamiz bruzerga yuklanganda Vue.Js avtomatik tarzda haqiqiy DOM’dan namuna olib Virtual DOM ni yaratadi va sahifamizdagi o’zgarishlarni Virtual DOM yordamida taqqoslab natijani haqiqiy DOM ga uzatadi. Keling mana shu jarayonni bosqichlarga bo’lib ko’rib chiqmiz:

_**1. State (o’zgaruvchi) o’zgartirildi.**_
Dasturimizda biror tugma (button) bosilish natijasida, bir o’zgaruvchi o’zgartirildi

_**2. Reactivity (reaktivlik) xususiyati**_
Vue.Js reaktivlik xususiyati orqali o’zgarish bo’lganini sezadi

**_3. Virtual DOM diffing and Updating (taqqoslash va yangilash jarayoni)_**
Vue.Js o’zgarish natijasida yangi Virtual DOM ni yaratadi va uni eskisi bilan taqqoslaydi, so’ng o’zgarish bo’lgan qismni o’zinigina yangilab qo’yadi

**_4. Haqiqiy DOM ga o’zgarishlarni uzatish_**
Virtual DOMdagi so’ngi natijaviy o’zgarishlar haqiqiy DOMga uzatiladi va tegishli qismlar o’zgartiriladi, bu bosqich odatda “patching” yoki “reconcilation” deb ham ataladi.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/67q70biibpd8koakzr1c.jpg)

**Haqiqiy DOM amaliy namuna:**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5kt4651rqzy45wnigvhy.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/azccylcq0ws3werkjpd0.gif)

Ko’rib turganimizdek DOM da bir marta o’zgarish bo’lgandan keyin ham ‘button’ bosilganda DOM qayta-qayta yangilanyapti va bu DOM uchun samarasiz hisoblanadi

**Virtual DOM yordamida:**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fjrqzedjv27v1kf9guzb.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pkizpm7p7x4g22sa6dbz.gif)

Virtual DOM haqiqiy DOM ni faqat birinchi marta ‘button’ bosilganda o’zgartiryapti, keyingi bir xil o’zgarishlarda qayta-qayta yangilamayapti mana bu ham Virtual DOMning samaradorligiga yana bir misol.

## “key” nega kerak?

Bilamizki Vue.Js yoki React.Js da ro’yhat yoki shu kabi o’xshash elementlarni o’z ichiga olgan kontent tuzganimizda, ularning ‘key’ atributiga takrorlanmas qiymatlarni biriktirib ketamiz.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gz48eqy5731wwphsp11x.png)
Aslida bu nega kerak?

Virtual DOM elementlarni Object Model ko’rinishida o’sha ‘key’lar bilan birga saqlaydi va o’zgarishlarni mana shu ‘key’ lar orqali ajratib oladi. Tasavvur qilamiz, Veb sahifada ketma-ket ro’yhat elementlari keltirilgan bo’lsin, ixtiyoriy element o’zgartirilganda Virtual DOM aynan qaysi element o’zgartirilganini o’sha “key” orqali aniqlaydi va tegishli qismni o’zgartiradi. Keling buni misollarda ko’ramiz.

_**“key” attribut berilmagan holatda:**_

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ikjyg9itm2ocu2xu7ub.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxmofqhy5mww7rn6m2it.gif)

Bu holatda Virtual DOM qaysi “input” qiymati o’zgarganligini aniqlay olmadi, chunki “key” atributi berilmagan.

_**“key” attribut berilgan holatda:**_

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zw4c2np9032531j8oz7w.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/alnw0ka30fsk29hftz9l.gif)

Mana endi hammasi to’g’ri ishlayapti. Bu holatda Virtual DOM key bilan birga saqlagan elementlarni o’sha “**key**”i orqali aniqlayapti, tartibini o’zgartiryapti!

## Xulosa
Bugungi blogda _Virtual DOM_ haqida umumiy ma’lumotlar, uning afzalliklari hamda haqiqiy DOM dan farqlarini ko’rib chiqdik. Qisqacha aytgancha Virtual DOM — bu haqiqiy DOM ning virtual nusxasi bo’lib, Vue.Js’ga sahifada biror o’zgarish sodir bo’lganda DOM ni dasturimizning tezligiga ortiqcha ta’sir qilmasdan eng samarali usul bilan o’zgartirishiga yordam beradi va bu veb saytlarni samaradorligi uchun eng muhim tamoillaridan biri hisoblanadi. Virtual DOM o’zgarishlarni samarali amalga oshirishda “key” atributidan foydalanadi, bir turdagi ro’yhat kabi elementlarni tegishli key qiymati bilan birga saqlaydi va o’zgarish sodir bo’lganda aynan o’sha “key” orqali elementni aniqlaydi va o’zgartiradi.

LinkedIn: [Link](https://www.linkedin.com/in/farrukh-aktamov-813a052b0/)

Telegram: [Link](https://t.me/Farrukh_Aktamov)