Sobes.tech
Middle

JavaScriptda Web Worker oqimini qanday yaratish mumkin?

sobes.tech AI

AIdan javob

JavaScriptda Web Worker yaratish uchun Worker konstruktoridan foydalaniladi, u alohida oqimda bajariladigan skriptning yo'lini qabul qiladi.

const worker = new Worker('path/to/worker.js');

Worker skripti (worker.js) boshqa global kontekstda bajariladi, u DOM yoki global window ob'ektiga kirish imkoniga ega emas. Asosiy skript va worker o'rtasida ma'lumot almashish uchun postMessage() metodlari va onmessage voqea ishlovchisi ishlatiladi.

Asosiy skriptda:

const worker = new Worker('worker.js');

// Workerga ma'lumot yuborish
worker.postMessage({ data: 'Asosiy oqimdan salom!' });

// Workerdan kelayotgan xabarlarni ishlash
worker.onmessage = function(event) {
  console.log('Workerdan olingan:', event.data);
};

// Worker xatolarini ishlash (ixtiyoriy)
worker.onerror = function(error) {
  console.error('Worker xatosi:', error);
};

// Workerni yakunlash
// worker.terminate();

Worker skriptida (worker.js):

// Asosiy oqimdan xabarlarni ishlash
self.onmessage = function(event) {
  console.log('Workerda qabul qilindi:', event.data);

  // Uzun davom etadigan operatsiya bajarish (misol uchun!)
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }

  // Natijani qaytarish
  self.postMessage({ result: result, originalData: event.data });
};

// Worker ichida xatolarni ishlash (ixtiyoriy)
self.onerror = function(error) {
  console.error('Worker ichida xato:', error);
};

// Worker boshqa skriptlarni import qilishi mumkin
// importScripts('utils.js', 'helper.js');

Web Workers resursga boy hisoblashlarni alohida oqimga chiqarishga imkon beradi, bu esa UI asosiy oqimini bloklamasdan, ilovaning javob berish qobiliyatini oshiradi. Cheklovlarni hisobga olish muhim: workerlar DOM, window, document, localStorage yoki sessionStoragega to'g'ridan-to'g'ri kirish imkoniga ega emas. Ma'lumot almashish qiymatlarni nusxalash yoki katta hajmdagi ma'lumotlarni uzatishda Transferable obyektlaridan foydalanish orqali amalga oshiriladi.