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
performance.now() — Date.now() dan aniqroq (kasr millisekund).
Qidiruv: massiv va Set
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
Birinchi variant har element uchun qidiruv qiladi — ish hajmi kvadratik o’sadi. Ikkinchisida ma’lumot bir marta indekslanadi.
DOM — eng qimmat qism
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
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
performance.now()bilan uch xil sikl usulini solishtiring;includesvaSet.hasni katta massivda o’lchang;- ichma-ich
findniMapbilan almashtiring; - 2000 element qo’shishni fragment bilan va fragmentsiz o’lchang;
scrollhodisasiga throttle qo’shing;- 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
setIntervalni tozalang — xotira oqishi. - Ko’pincha kod hajmi tezligidan muhimroq.
Keyingi darsda xavfsizlik asoslari.