Ինչպես ստեղծել 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 օբյեկտների օգտագործմամբ՝ մեծ տվյալների փոխանցման արդյունավետությունը բարձրացնելու համար։