Middle
Czym są web worker i do czego służą?
sobes.tech AI
Odpowiedź od AI
Web worker’y to sposób wykonywania skryptów w wątkach w tle, oddzielonych od głównego wątku interfejsu użytkownika.
Ich główne cele:
- Zwiększenie wydajności: Przeniesienie zasobożernych zadań (skomplikowane obliczenia, przetwarzanie dużych ilości danych, parsowanie) z głównego wątku, który odpowiada za renderowanie interfejsu i obsługę zdarzeń użytkownika. Zapobiega to "zawieszaniu" strony i poprawia responsywność aplikacji.
- Paralelizm: Umożliwia wykonywanie wielu zadań jednocześnie, efektywniej wykorzystując procesory wielordzeniowe.
Istnieją trzy typy web workerów:
- Dedicated Workers: Powiązane z konkretną stroną i dostępne tylko dla niej.
- Shared Workers: Mogą być dostępne z wielu stron lub kart tej samej domeny.
- Service Workers: Działają jak proxy sieciowe, przechwytując żądania sieciowe i umożliwiając implementację funkcji offline, powiadomień push i innych możliwości progresywnych aplikacji internetowych (PWA).
Zasady działania:
- Oddzielny kontekst: Worker ma własny obiekt globalny i dostęp do podzbioru API przeglądarki (brak dostępu do DOM,
window,document,parent). - Wymiana wiadomości: Interakcja między głównym wątkiem a workerem odbywa się za pomocą wiadomości
postMessage()i obsługi zdarzeńonmessage. Dane są przesyłane jako wartość (kopiowane) lub jako odwołanie (Obiekty Transferowalne).
Przykład użycia Dedicated Worker:
// main.js (główny wątek)
const worker = new Worker('worker.js'); // Tworzenie workera
worker.onmessage = (event) => {
// Obsługa wiadomości od workera
console.log('Odebrano od workera:', event.data);
};
worker.postMessage('Rozpocznij skomplikowaną operację'); // Wysyłanie wiadomości do workera
// worker.js (plik workera)
onmessage = (event) => {
// Obsługa wiadomości z głównego wątku
console.log('Odebrano z głównego wątku:', event.data);
// Wykonanie skomplikowanego zadania
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Wysyłanie wyniku z powrotem
postMessage(result);
};