Middle
Czym są web worker i do czego służą?
sobes.tech AI
Odpowiedź od AI
Web workery to sposób uruchamiania kodu JavaScript w tle, oddzielonym od głównego wątku interfejsu użytkownika przeglądarki.
Cel:
- Wykonywanie obliczeń zasobożernych bez blokowania głównego wątku, co zapobiega zawieszaniu się interfejsu.
- Przetwarzanie dużych danych lub wykonywanie długotrwałych operacji (np. parsowanie, kompresja, żądania sieciowe w niektórych przypadkach) w tle.
- Poprawa wydajności i responsywności aplikacji internetowych.
Typy web workerów:
- Dedicated Worker: Powiązany z skryptem, który go utworzył.
- Shared Worker: Może być współdzielony między kilkoma skryptami działającymi w różnych oknach lub zakładkach tej samej domeny.
- Service Worker: Przechwytuje żądania sieciowe, zarządza pamięcią podręczną, zapewnia dostęp offline, obsługuje powiadomienia push.
Przykład tworzenia i użycia Dedicated Worker:
// main.js (główny wątek)
const worker = new Worker('worker.js');
// Wysyłanie wiadomości do workera
worker.postMessage('Rozpocznij ciężkie obliczenia');
// Odbieranie wiadomości od workera
worker.onmessage = function(event) {
console.log('Odebrane od workera:', event.data);
};
// worker.js (kod workera)
self.onmessage = function(event) {
console.log('Odebrano w workerze:', event.data);
// Symulacja ciężkich obliczeń
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Wysyłanie wiadomości z powrotem do głównego wątku
self.postMessage('Obliczenia zakończone, wynik: ' + result);
};
Ograniczenia:
- Brak bezpośredniego dostępu do DOM.
- Nie można używać niektórych zmiennych globalnych głównego wątku (np.
window,document). - Komunikacja odbywa się przez asynchroniczną wymianę wiadomości (
postMessageionmessage/addEventListener('message')). - Dane między wątkami są przesyłane przez kopiowanie (algorytm klonowania strukturalnego), ale dla dużych danych można użyć
Transferable Objectsdo przesyłania przez referencję (z utratą dostępu w oryginalnym wątku).