Zastosowania i ograniczenia
Proszę poznać sytuacje, w których workery pomagają, oraz ich ograniczenia.
Zastosowania i ograniczenia to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 4 lekcji w sumie.
Do czego dobrze nadają się workery
Workery sprawdzają się szczególnie dobrze przy intensywnych obliczeniowo zadaniach, które w przeciwnym razie zamroziłyby interfejs użytkownika:
- Przetwarzanie obrazów i wideo
- Analizowanie dużych plików (CSV, JSON)
- Kryptografia i haszowanie
- Fizyka, analiza danych i symulacje
Brak dostępu do DOM
Największe ograniczenie: workery nie mogą uzyskiwać dostępu do DOM. Nie ma w nich obiektu document ani window. Workery obliczają dane i odsyłają je, a główny wątek aktualizuje interfejs użytkownika.
// Inside a worker:
// document.querySelector(...) -> ReferenceError
// Workers have no DOM at all.Co JEST dostępne
Workery nadal mają dostęp do wielu przydatnych interfejsów API: fetch, setTimeout, WebSocket, IndexedDB, crypto i tablic typowanych. Pobieranie danych i przechowywanie działają więc poprawnie poza głównym wątkiem.
// Inside a worker this is valid:
// const res = await fetch('/data.json');
// const json = await res.json();
// self.postMessage(json);Ograniczenia klonowania strukturalnego
Przypomnijmy, że komunikaty są kopiowane za pomocą klonowania strukturalnego. Nie można wysyłać funkcji, węzłów DOM ani instancji klas z metodami, a jedynie ich serializowalne dane.
// Cannot be sent:
// worker.postMessage(() => {}); // function - fails
// worker.postMessage(document.body); // DOM node - failsKoszt uruchomienia i komunikacji
Tworzenie workera i serializowanie komunikatów wiąże się z narzutem. W przypadku małych zadań koszt komunikacji może przewyższać korzyści. Workery opłacają się przy znaczącym, długotrwałym obciążeniu.
Utrzymywanie workerów przy życiu
Uruchamianie nowego workera dla każdego zadania jest nieefektywne. Należy ponownie wykorzystywać długotrwale działającego workera i wysyłać mu wiele komunikatów albo utrzymywać niewielką pulę workerów w celu zrównoleglenia pracy.
// Reuse one worker for many tasks:
const worker = new Worker('worker.js');
function run(task) {
worker.postMessage(task);
}
// Avoid: new Worker(...) on every single call.Pule workerów
Aby korzystać z wielu rdzeni CPU, należy utworzyć kilka workerów i rozdzielać między nie zadania. Trzeba śledzić, które workery są bezczynne, i przydzielać napływającą pracę wolnym workerom.
const pool = [];
for (let i = 0; i < 4; i++) {
pool.push(new Worker('worker.js'));
}
// Round-robin or queue tasks across the pool.Współdzielenie pamięci
W zaawansowanych przypadkach SharedArrayBuffer umożliwia wątkom bezpośrednie współdzielenie pamięci (z użyciem Atomics do bezpiecznego dostępu). Wymaga to specjalnych nagłówków izolacji cross-origin i łatwo użyć tego mechanizmu nieprawidłowo.
// Requires COOP/COEP headers to be enabled.
// const shared = new SharedArrayBuffer(1024);
// Atomics.add(view, 0, 1); // safe concurrent updateIzolacja błędów
Nieobsłużony błąd w workerze nie powoduje awarii strony. Pojawia się jako zdarzenie error na workerze, które należy obsłużyć, aby zapisać błąd w logu lub ponownie uruchomić workera.
worker.onerror = (e) => {
console.log('worker failed:', e.message);
// optionally recreate the worker here
};Kiedy NIE używać workerów
Workerów nie należy używać, gdy zadanie jest trywialne, wymaga ciągłych aktualizacji DOM-u lub polega głównie na oczekiwaniu na sieć (asynchroniczny fetch i tak nie blokuje). Należy używać ich do rzeczywistej pracy ograniczonej przez CPU.
Łączenie wszystkiego
Workery zamieniają bezpośredni dostęp do DOM-u i łatwe współdzielenie danych na prawdziwą równoległość. Należy używać ich do intensywnych obliczeń, komunikować się za pomocą komunikatów, ponownie wykorzystywać workery i transferować duże bufory, aby aplikacja działała szybko i płynnie.
Szybki test
Proszę sprawdzić, czy rozumieją Państwo zastosowania i ograniczenia workerów.
Podsumowanie
Poznali Państwo zastosowania i ograniczenia workerów:
- Workery świetnie nadają się do intensywnych obliczeniowo zadań, ale nie mają dostępu do DOM.
- Wiele interfejsów API (
fetch,IndexedDB,crypto) jest dostępnych. - Komunikaty są klonowane strukturalnie, dlatego nie można przesyłać funkcji ani węzłów DOM.
- Należy ponownie wykorzystywać workery lub pule workerów, aby zamortyzować koszt uruchamiania.
- Błędy pozostają odizolowane w workerze.
Ukończyli Państwo naukę o Web Workers. Następnie omówimy IndexedDB.
Często zadawane pytania
Czy lekcja „Zastosowania i ograniczenia” jest bezpłatna?
Tak — pełny tekst „Zastosowania i ograniczenia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zastosowania i ograniczenia”?
Proszę poznać sytuacje, w których workery pomagają, oraz ich ograniczenia. Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?
Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Zastosowania i ograniczenia”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?
Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tworzenie Web Workera
- Komunikacja za pomocą postMessage
- Obiekty transferowalne
- Zastosowania i ograniczenia