IslomDevIslomDev
Booster
Imtihon
Booster
Imtihon
  • Angular Intervyu Tayyorgarlik
  • JavaScript / TypeScript

    • JavaScript / TypeScript
    • Asoslar (JavaScript)
    • Asinxronlik
    • Prototip va OOP
    • TypeScript
    • Performance
  • Algoritmlash

    • Algoritmlash
    • Murakkablik tahlili
    • Ma'lumot tuzilmalari
    • Qidiruv va Saralash
    • Algoritmik paradigmalar
    • Amaliy masalalar
  • Angular — Boshlang'ich

    • Angular — Boshlang'ich
    • Component
    • Template
    • Change Detection
    • Advanced Component
  • Angular — Service va DI

    • Angular — Service va DI
    • Service asoslari
    • HTTP
    • Hierarchical DI
    • Advanced DI
    • State management (service)
  • Angular — Versiyalar

    • Angular — Versiyalar
    • Angular 12–13
    • Angular 14
    • Angular 15
    • Angular 16
    • Angular 17
    • Angular 18+
  • Angular — Directive

    • Angular — Directive
    • Built-in Directives
    • Custom Attribute Directive
    • Custom Structural Directive
    • Advanced
  • Angular — RxJS

    • Angular — RxJS
    • Observable asoslari
    • Asosiy operatorlar
    • Higher-order operatorlar
    • Combination operatorlar
    • Subject turlari
    • Xato va xotira
    • Advanced
  • Angular — Pipe

    • Angular — Pipe
    • Built-in Pipes
    • Custom Pipe
    • Performance
  • Angular — Forms

    • Angular — Forms
    • Template-driven Forms
    • Reactive Forms
    • Validators
    • Advanced
  • Angular — NgModule

    • Angular — NgModule
    • NgModule asoslari
    • Module arxitekturasi
    • Lazy Loading
    • Standalone vs NgModule
  • Angular — Sintaksis va Clean Code

    • Angular — Sintaksis va Clean Code
    • Template sintaksisi
    • Angular 17+ yangi sintaksis
    • Komponent arxitekturasi
    • Performance pattern'lar
    • SOLID va Clean Code
    • Testing

Performance

Daraja:

Senior darajadagi JavaScript mavzulari: xotira boshqaruvi, garbage collection, closure leak va og'ir hisob-kitoblarni Web Worker'ga ajratish.

Memory management — GC, closure leak, WeakMap/WeakSet

Senior

Nima bu?

JavaScript avtomatik **Garbage Collection (GC)** bilan ishlaydi — erishilmaydigan ob'ektlar xotiradan tozalanadi. Mark-and-sweep algoritmi eng keng tarqalgan. Closure DOM element yoki katta ob'ektga reference saqlab qolsa **memory leak** yuz beradi. `WeakMap` va `WeakSet` kalit/ob'ektga zaif reference beradi — boshqa reference qolmasa GC tozalashi mumkin. Angular'da unsubscribe qilmaslik va global listener'lar tipik leak manbalari.

Kod misoli

// Closure leak — DOM element saqlanib qoladi
function attachListener() {
  const button = document.getElementById('submit');
  const hugeData = new Array(1_000_000).fill('data');

  button.addEventListener('click', () => {
    // button va hugeData closure orqali saqlanadi
    console.log(hugeData.length);
  });
  // button DOM dan olib tashlansa ham listener + closure xotirada qolishi mumkin
}

// To'g'ri yondashuv — cleanup
function attachListenerSafe() {
  const button = document.getElementById('submit');
  const handler = () => console.log('clicked');
  button.addEventListener('click', handler);
  return () => button.removeEventListener('click', handler);
}

// WeakMap — ob'ekt kalit, GC tozalashi mumkin
const cache = new WeakMap();

function processUser(user) {
  if (!cache.has(user)) {
    cache.set(user, expensiveCompute(user));
  }
  return cache.get(user);
}

// user ob'ekt boshqa joyda reference qolmasa, cache entry ham tozalanadi

// WeakSet — ob'ekt a'zoligi
const visited = new WeakSet();
function walk(node) {
  if (visited.has(node)) return;
  visited.add(node);
  node.children?.forEach((child) => walk(child));
}

Imtihonda

- JavaScript GC qanday ishlaydi? Memory leak sabablari nima? - `Map` va `WeakMap` farqi nima? Qachon WeakMap tanlanadi?

Yodlash uchun

Leak = keraksiz reference; zaif bog'lanish kerak bo'lsa — WeakMap/WeakSet.
Angular: `takeUntilDestroyed()`, `async` pipe va `ngOnDestroy`'da unsubscribe — leak oldini olishning standart yo'li.

Web Workers — asosiy thread yuklama

Senior

Nima bu?

Web Worker — alohida thread'da JavaScript kodini bajarish imkonini beradi. Asosiy thread (UI thread) bloklanmaydi — animatsiya va foydalanuvchi interaksiyasi silliq qoladi. Worker va main thread `postMessage` / `onmessage` orqali ma'lumot almashadi (structured clone). SharedArrayBuffer va Atomics parallel hisob-kitob uchun mavjud, lekin xavfsizlik cheklovlari bor. Og'ir parse, filter yoki kriptografiya uchun mos.

Kod misoli

// main.js — asosiy thread
const worker = new Worker(new URL('./heavy.worker.js', import.meta.url));

worker.postMessage({
  type: 'FILTER',
  payload: { items: largeArray, minPrice: 100000 },
});

worker.onmessage = (event) => {
  const { type, result } = event.data;
  if (type === 'FILTER_DONE') {
    renderProducts(result); // UI yangilanadi
    worker.terminate(); // ish tugasa yopish mumkin
  }
};

worker.onerror = (err) => {
  console.error('Worker xato:', err.message);
};

// heavy.worker.js — worker thread
self.onmessage = (event) => {
  const { type, payload } = event.data;

  if (type === 'FILTER') {
    const filtered = payload.items.filter(
      (item) => item.price >= payload.minPrice
    );
    self.postMessage({ type: 'FILTER_DONE', result: filtered });
  }
};

// Angular'da (konseptual):
// ng generate web-worker data-processor
// this.worker = new Worker(new URL('./data-processor.worker', import.meta.url));

Imtihonda

- Web Worker nima uchun kerak? Nimalarni worker'da bajarish mumkin, nimalarni yo'q? - Main thread va worker o'rtasida ma'lumot qanday uzatiladi? DOM'ga kirish mumkinmi?

Yodlash uchun

Og'ir CPU ishi → Worker; DOM va UI → faqat main thread.
Angular'da katta CSV parse yoki murakkab filter'ni worker'ga o'tkazish change detection va scroll performance'ni yaxshilaydi.
Prev
TypeScript