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.