Sobes.tech
Middle

JavaScript-də Web Worker axını necə yaratmaq olar?

sobes.tech Süni İntellekt

AI-dan cavab

JavaScript-də Web Worker axını Worker konstruktoru vasitəsilə yaradıla bilər.

// Yeni Web Worker yaradırıq və JS faylın yolunu keçiririk,
// bu fayl ayrıca axında icra olunacaq.
const worker = new Worker('worker.js'); 

worker.js faylında (və ya worker yaradılarkən göstərilən başqa faylda) kod ayrıca axında icra olunacaq.

// worker.js

// Əsas axından göndərilən mesajların emalı
self.onmessage = function(event) {
  const receivedData = event.data;
  console.log('Əsas axından alınan mesaj:', receivedData);

  // Mesajı geri əsas axına göndərmək
  const responseData = { message: 'Worker-dən salam!', data: receivedData };
  self.postMessage(responseData);
};

// İstəyə bağlı olaraq, səhv idarəetməsi əlavə oluna bilər
self.onerror = function(error) {
  console.error('Worker-də xəta:', error);
};

Əsas axında (worker yaradıldığı yerdə), worker ilə qarşılıqlı əlaqə qurmaq olar:

// main.js

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

// Web Worker-ə mesaj göndərmək
worker.postMessage({ command: 'start', payload: 'some data' });

// Web Worker-dən alınan mesajları işləmək
worker.onmessage = function(event) {
  const receivedData = event.data;
  console.log('Worker-dən alınan mesaj:', receivedData);
};

// Web Worker-də səhvləri idarə etmək
worker.onerror = function(error) {
  console.error('Main axında Worker xətası:', error);
};

// Web Worker-i bağlamaq (istəyə bağlı)
// worker.terminate(); 

Əsas nöqtələr:

  • Əlaqə: Əsas axın və worker arasında məlumat mübadiləsi postMessage() metodları və onmessage handler vasitəsilə həyata keçirilir.
  • Məhdudiyyətlər: Worker-lər DOM-a, window obyektinə və brauzerin digər qlobal obyektlərinə girişə malik deyil. Onlar navigator, location, XMLHttpRequest, setTimeout, setInterval, fetch, WebSockets və digər obyektlərə məhdud girişə malikdir.
  • İzolyasiya: Worker-dəki kod ayrıca axında icra olunur, bu da əsas axını bloklamadan və performansı artırır, xüsusən resurslara intensiv hesablamalar zamanı.