Sobes.tech
Middle

როგორ შევქმნათ Web Worker ნაკადი JavaScript-ში?

sobes.tech AI

პასუხი AI-სგან

JavaScript-те Web Worker ნაკადს შექმნა შესაძლებელია Worker კონსტრუქტორის გამოყენებით.

// ახალი Web Worker-ის შექმნა, გადაცემა JS ფაილის გზა,
// რომელიც შესრულდება ცალკე ნაკადში.
const worker = new Worker('worker.js'); 

worker.js ფაილში (ან ნებისმიერ სხვა ფაილში, რომელიც მითითებულია ვორკერის შექმნისას) კოდი შესრულდება ცალკე ნაკადში.

// worker.js

// შეტყობინებების დამუშავება, რომლებიც გამოგზავნილია ძირითადი ნაკადიდან
self.onmessage = function(event) {
  const receivedData = event.data;
  console.log('შეტყობინება მიღებულია ძირითადი ნაკადიდან:', receivedData);

  // შეტყობინების დაბრუნება ძირითადი ნაკადში
  const responseData = { message: 'გამარჯობა Worker-დან!', data: receivedData };
  self.postMessage(responseData);
};

// სურვილისამებრ, შეიძლება დაამატოთ შეცდომების დამუშავება
self.onerror = function(error) {
  console.error('შეცდომა Worker-ში:', error);
};

ძირითადი ნაკადში (სადაც შექმნილია ვორკერი) შესაძლებელია ურთიერთქმედება:

// main.js

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

// შეტყობინების გაგზავნა Web Worker-ს
worker.postMessage({ command: 'start', payload: 'ზოგიერთი მონაცემი' });

// შეტყობინებების დამუშავება, რომლებიც მოდის Web Worker-დან
worker.onmessage = function(event) {
  const receivedData = event.data;
  console.log('Worker-დან მიღებული შეტყობინება:', receivedData);
};

// შეცდომების დამუშავება Web Worker-ში
worker.onerror = function(error) {
  console.error('ძირითადი ნაკადის შეცდომა: ', error);
};

// Web Worker-ის დასრულება (სურვილისამებრ)
// worker.terminate(); 

ძირითადი საკითხები:

  • კავშირი: მონაცემთა გაცვლა ძირითადი ნაკადი და worker შორის ხდება postMessage() მეთოდით და onmessage handler-ით.
  • შეზღუდვები: Worker-ებს არ აქვთ წვდომა DOM, window ობიექტზე და სხვა ბრაუზერის გლობალურ ობიექტებზე. მათ აქვთ შეზღუდული წვდომა navigator, location, XMLHttpRequest, setTimeout, setInterval, fetch, WebSockets და სხვა ობიექტებზე.
  • იზოლაცია: Worker-ის კოდი შესრულდება ცალკე ნაკადში, რაც თავიდან აცილებს ძირითადი ნაკადის დაბლოკვას და აუმჯობესებს შესრულების სიჩქარეს, განსაკუთრებით რესურსმჭრელ გამოთვლებში.