Ako vytvoriť vlákno Web Worker v JavaScript?
sobes.tech AI
Odpoveď od AI
Pre vytvorenie Web Worker v JavaScripte sa používa konštruktor Worker, ktorý prijíma cestu ku skriptu, ktorý sa vykonáva v samostatnom vlákne.
const worker = new Worker('path/to/worker.js');
Skript pracovníka (worker.js) sa vykonáva v inom globálnom kontexte, ktorý nemá prístup k DOM alebo k globálnemu objektu window. Na výmenu dát medzi hlavným skriptom a pracovníkom sa používajú metódy postMessage() a spracovateľ udalostí onmessage.
V hlavnom skripte:
const worker = new Worker('worker.js');
// Odoslanie dát pracovníkovi
worker.postMessage({ data: 'Ahoj z hlavného vlákna!' });
// Spracovanie správ od pracovníka
worker.onmessage = function(event) {
console.log('Prijaté od pracovníka:', event.data);
};
// Spracovanie chýb pracovníka (nepovinné)
worker.onerror = function(error) {
console.error('Chyba v pracovníkovi:', error);
};
// Ukončenie práce pracovníka
// worker.terminate();
V skripte pracovníka (worker.js):
// Spracovanie správ od hlavného vlákna
self.onmessage = function(event) {
console.log('Prijaté v pracovníkovi:', event.data);
// Vykonanie dlhodobej operácie (príklad!)
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Odoslanie výsledku späť do hlavného vlákna
self.postMessage({ result: result, originalData: event.data });
};
// Spracovanie chýb vo vnútri pracovníka (nepovinné)
self.onerror = function(error) {
console.error('Chyba v pracovníkovi:', error);
};
// Pracovník môže importovať iné skripty
// importScripts('utils.js', 'helper.js');
Web Workers umožňujú presunúť výpočty náročné na zdroje do samostatného vlákna, čím sa zabraňuje blokovaniu hlavného vlákna používateľského rozhrania a zlepšuje sa odozva aplikácie. Je potrebné vziať do úvahy obmedzenia: pracovníci nemajú priame prístupy k DOM, window, document, localStorage alebo sessionStorage. Výmena dát sa vykonáva kopírovaním hodnôt alebo použitím objektov Transferable na zvýšenie výkonu pri prenose veľkých objemov dát.