Sobes.tech
Middle

Ինչպես ստեղծել Web Worker հոսք JavaScript-ում?

sobes.tech AI

Պատասխան AI-ից

JavaScript-ում Web Worker ստեղծելու համար օգտագործվում է Worker կոնստրուկտորը, որը ընդունում է սցրիպտի ուղին, որը կատարվում է առանձին հոսքում:

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

Worker-ի սցրիպտը (worker.js) կատարվում է այլ գլոբալ կոնտեքստում, որը չունի մուտք դեպի DOM կամ գլոբալ օբյեկտ window. Տվյալների փոխանակման համար հիմնական սցրիպտի և worker-ի միջև օգտագործվում են postMessage() մեթոդը և onmessage իրադարձության հսկողը:

Հիմնական սցրիպտում:

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

// Տվյալների ուղարկում worker-ին
worker.postMessage({ data: 'Բարև հիմնական հոսքից!' });

// Հաղորդագրությունների մշակումը worker-ից
worker.onmessage = function(event) {
  console.log('Ստացվել է worker-ից:', event.data);
};

// Վարողության սխալների մշակումը (ոչ պարտադիր)
worker.onerror = function(error) {
  console.error('Սխալ worker-ում:', error);
};

// Worker-ի աշխատանքը ավարտել
// worker.terminate();

Worker-ի սցրիպտում (worker.js):

// Հաղորդագրությունների մշակումը հիմնական հոսքից
self.onmessage = function(event) {
  console.log('Ստացվել է worker-ում:', event.data);

  // Ուղղակի երկարատև գործողություն (օրինակ)
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }

  // Արդյունքի վերադարձ հիմնական հոսք
  self.postMessage({ result: result, originalData: event.data });
};

// Վարողության սխալների մշակումը (ոչ պարտադիր)
self.onerror = function(error) {
  console.error('Սխալ worker-ի ներսում:', error);
};

// Worker-ը կարող է ներբեռնել այլ սցրիպտներ
// importScripts('utils.js', 'helper.js');

Web Workers-ը թույլ են տալիս տեղափոխել ռեսուրսային ծանր հաշվարկները առանձին հոսք, կանխելով հիմնական UI հոսքի բլոկավորումը և բարելավելով հավելվածի արձագանքումը: Պետք է հաշվի առնել սահմանափակումները՝ worker-ները չունեն ուղիղ մուտք դեպի DOM, window, document, localStorage և sessionStorage. Տվյալների փոխանակումը կատարվում է արժեքների պատճենմամբ կամ Transferable օբյեկտների օգտագործմամբ՝ մեծ տվյալների փոխանցման արդյունավետությունը բարձրացնելու համար։