Middle
Co jsou weboví pracovníci a k čemu slouží?
sobes.tech AI
Odpověď od AI
Webové pracovníky jsou způsob, jak spouštět kód JavaScript na pozadí, odděleně od hlavního vlákna uživatelského rozhraní prohlížeče.
Účel:
- Provádět náročné výpočty bez blokování hlavního vlákna, což zabraňuje zamrznutí rozhraní.
- Zpracovávat velká data nebo provádět dlouhotrvající operace (například parsing, komprese, síťové požadavky v některých případech) na pozadí.
- Zlepšit výkon a odezvu webových aplikací.
Typy webových pracovníků:
- Dedicated Worker: Je spojen s skriptem, který ho vytvořil.
- Shared Worker: Může být sdílen mezi několika skripty běžícími v různých oknech nebo záložkách stejné domény.
- Service Worker: Zachytává síťové požadavky, spravuje cache, zajišťuje offline přístup, podporuje push notifikace.
Příklad vytvoření a použití Dedicated Worker:
// main.js (hlavní vlákno)
const worker = new Worker('worker.js');
// Odeslání zprávy workerovi
worker.postMessage('Začít těžké výpočty');
// Přijímání zpráv od workera
worker.onmessage = function(event) {
console.log('Přijato od workera:', event.data);
};
// worker.js (kód workera)
self.onmessage = function(event) {
console.log('Přijato ve workeru:', event.data);
// Simulace těžkých výpočtů
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Odeslání zprávy zpět do hlavního vlákna
self.postMessage('Výpočty dokončeny, výsledek: ' + result);
};
Omezení:
- Přímý přístup k DOM není možný.
- Nelze používat některé globální proměnné hlavního vlákna (například
window,document). - Komunikace probíhá prostřednictvím asynchronního výměny zpráv (
postMessageaonmessage/addEventListener('message')). - Data mezi vlákny jsou přenášena kopírováním (structured clone algoritmus), ale pro velká data lze použít
Transferable Objectspro přenos odkazem (ztráta přístupu v původním vlákně).