Sobes.tech
Middle

Čo sú weboví pracovníci a na čo slúžia?

sobes.tech AI

Odpoveď od AI

Webové pracovníky sú spôsob, ako spúšťať kód JavaScript na pozadí, oddelený od hlavného vlákna používateľského rozhrania prehliadača.

Účel:

  • Vykonávať náročné výpočty bez blokovania hlavného vlákna, čím sa zabraňuje zamrznutiu rozhrania.
  • Spracovávať veľké dáta alebo vykonávať dlhé operácie (napríklad parsing, kompresia, sieťové požiadavky v niektorých prípadoch) na pozadí.
  • Zlepšiť výkon a odozvu webových aplikácií.

Typy webových pracovníkov:

  1. Dedicated Worker: Je spojený so skriptom, ktorý ho vytvoril.
  2. Shared Worker: Môže byť zdieľaný medzi viacerými skriptami, ktoré bežia v rôznych oknách alebo záložkách tej istej domény.
  3. Service Worker: Zachytáva sieťové požiadavky, spravuje cache, poskytuje offline prístup, podporuje push notifikácie.

Príklad vytvorenia a použitia Dedicated Workera:

// main.js (hlavné vlákno)
const worker = new Worker('worker.js');

// Odoslanie správy workerovi
worker.postMessage('Začať ťažké výpočty');

// Prijímanie správ od workera
worker.onmessage = function(event) {
  console.log('Prijaté od workera:', event.data);
};

// worker.js (kód workera)
self.onmessage = function(event) {
  console.log('Prijaté vo workeri:', event.data);

  // Simulácia ťažkých výpočtov
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }

  // Odoslanie správy späť do hlavného vlákna
  self.postMessage('Výpočty ukončené, výsledok: ' + result);
};

Obmedzenia:

  • Žiadny priamy prístup k DOM.
  • Nie je možné používať niektoré globálne premenné hlavného vlákna (napríklad window, document).
  • Komunikácia prebieha prostredníctvom asynchrónnej výmeny správ (postMessage a onmessage/addEventListener('message')).
  • Dáta medzi vláknami sa prenášajú kopírovaním (structured clone algoritmus), ale pre veľké dáta je možné použiť Transferable Objects na prenos odkazom (strata prístupu v pôvodnom vlákne).