JavaScript tezlik va optimallashtirish

Sekin sahifadan foydalanuvchi ketadi. Bu darsda tezlikka eng ko’p ta’sir qiladigan joylar va ularni qanday o’lchash kerakligi.

Avval o’lchang

JavaScript

performance.now()Date.now() dan aniqroq (kasr millisekund).

Qidiruv: massiv va Set

JavaScript

Farq juda katta. Ko’p marta qidiriladigan ma’lumot uchun Set yoki Map tanlang — bu eng ko’p foyda beradigan o’zgarishlardan biri.

Ichma-ich sikldan qutulish

JavaScript

Birinchi variant har element uchun qidiruv qiladi — ish hajmi kvadratik o’sadi. Ikkinchisida ma’lumot bir marta indekslanadi.

DOM — eng qimmat qism

JavaScript
Sahifa

DocumentFragment sahifaga bir marta tegadi, bittalab append esa har safar.

O’qish va yozishni aralashtirmang

// ❌ Yomon: har aylanishda majburiy reflow
for (const el of elementlar) {
  el.style.height = el.offsetHeight + 10 + "px";
}

// ✅ Yaxshi: avval hammasini o'qish, keyin yozish
const balandliklar = elementlar.map((el) => el.offsetHeight);
elementlar.forEach((el, i) => {
  el.style.height = balandliklar[i] + 10 + "px";
});

O’qish va yozish navbatlashsa, brauzer har safar qaytadan hisoblashga majbur bo’ladi — bu layout thrashing deb ataladi.

Hodisalarni cheklash

Tez-tez ishlaydigan hodisalar (scroll, resize, input) uchun debounce va throttle majburiy:

window.addEventListener("scroll", throttle(() => {
  console.log(window.scrollY);
}, 100));

Aks holda funksiya soniyasiga o’nlab marta chaqiriladi.

Xotira oqishi

JavaScript

Uch keng tarqalgan sabab: olib tashlanmagan tinglovchilar, to’xtatilmagan setInterval va o’sib boruvchi global massiv/kesh.

Yuklash tezligi

Ko’pincha JavaScript’ning hajmi uning tezligidan muhimroq:

Usul Ta’siri
Dinamik import() Kerak bo’lmagan kod yuklanmaydi
Tree shaking Ishlatilmagan eksportlar tushmaydi
Kutubxonani tanlash Katta paket o’rniga kichigi yoki o’z kodingiz
defer / type="module" HTML tahlilini to’smaydi
Rasm formati va o’lchami Odatda JS’dan ko’proq bayt

O’lchash vositalari

  • DevTools → Performance — yozib olish, qaysi funksiya qancha vaqt olganini ko’rish;
  • Lighthouse — sahifa bahosi va tavsiyalar;
  • Network — nima yuklanmoqda va qancha vaqtda;
  • performance.now() — kod ichida aniq o’lchov.

DevTools darsida asosiy panellar ko’rilgan.

Amaliy mashq

  1. performance.now() bilan uch xil sikl usulini solishtiring;
  2. includes va Set.has ni katta massivda o’lchang;
  3. ichma-ich find ni Map bilan almashtiring;
  4. 2000 element qo’shishni fragment bilan va fragmentsiz o’lchang;
  5. scroll hodisasiga throttle qo’shing;
  6. DevTools Performance panelida yozib olib ko’ring.

Qisqacha xulosa

  • Avval o’lchang — taxmin bilan optimallashtirmang.
  • Ko’p qidiriladigan ma’lumot uchun Set/Map — eng katta foyda.
  • Ichma-ich sikl o’rniga oldindan indeks yasang.
  • DOM’ga bir marta teging: DocumentFragment, guruhlangan o’zgartirish.
  • O’qish va yozishni aralashtirmang (layout thrashing).
  • Tinglovchi va setInterval ni tozalang — xotira oqishi.
  • Ko’pincha kod hajmi tezligidan muhimroq.

Keyingi darsda xavfsizlik asoslari.

Bu dars foydali bo'ldimi?

marta ko'rildi