Anvendelser og begrænsninger
Lær, hvornår workers er nyttige, og hvad de ikke kan gøre.
Anvendelser og begrænsninger er en gratis JavaScript Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i JavaScript Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. JavaScript Academy-kurset indeholder 4 lektioner i alt.
Hvad workers er gode til
Web Workers er særligt velegnede, når du har CPU-tungt arbejde, der ellers ville fryse brugergrænsefladen:
- Billed- og videobehandling
- Analyse af store filer (CSV, JSON)
- Kryptografi og hashberegning
- Fysik, dataanalyse og simuleringer
Ingen adgang til DOM
Den største begrænsning er, at workers ikke kan røre ved DOM'en. Der findes hverken document eller window. De beregner data og sender dem tilbage; hovedtråden opdaterer brugergrænsefladen.
// Inside a worker:
// document.querySelector(...) -> ReferenceError
// Workers have no DOM at all.Hvad der ER tilgængeligt
Workers har stadig adgang til mange nyttige API'er: fetch, setTimeout, WebSocket, IndexedDB, crypto og typede arrays. Så datahentning og lagring fungerer fint i en separat tråd.
// Inside a worker this is valid:
// const res = await fetch('/data.json');
// const json = await res.json();
// self.postMessage(json);Begrænsninger ved struktureret kloning
Husk, at meddelelser kopieres via struktureret kloning. Du kan ikke sende funktioner, DOM-noder eller klasseinstanser med metoder, kun deres serialiserbare data.
// Cannot be sent:
// worker.postMessage(() => {}); // function - fails
// worker.postMessage(document.body); // DOM node - failsOmkostninger ved opstart og meddelelser
At oprette en worker og serialisere meddelelser medfører en omkostning. For små opgaver kan omkostningen ved meddelelser opveje fordelen. Workers kan betale sig ved omfattende, vedvarende arbejde.
Hold workers kørende
Det er spild at starte en ny worker for hver opgave. Genbrug en langlivet worker og send den mange meddelelser, eller vedligehold en lille pulje workers for parallel behandling.
// 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.Worker-puljer
For at bruge flere CPU-kerner skal du oprette flere workers og fordele opgaverne mellem dem. Hold styr på, hvilke der er ledige, og tildel indkommende arbejde til de ledige.
const pool = [];
for (let i = 0; i < 4; i++) {
pool.push(new Worker('worker.js'));
}
// Round-robin or queue tasks across the pool.Deling af hukommelse
I avancerede tilfælde giver SharedArrayBuffer tråde mulighed for at dele hukommelse direkte (med Atomics for sikker adgang). Det kræver særlige headere til isolation på tværs af oprindelser og er let at bruge forkert.
// Requires COOP/COEP headers to be enabled.
// const shared = new SharedArrayBuffer(1024);
// Atomics.add(view, 0, 1); // safe concurrent updateIsolering af fejl
En uhåndteret fejl i en worker får ikke siden til at gå ned. Den vises som en error-hændelse på workeren, som du bør håndtere for at logge fejlen eller genstarte workeren.
worker.onerror = (e) => {
console.log('worker failed:', e.message);
// optionally recreate the worker here
};Hvornår workers IKKE skal bruges
Spring workers over, når opgaven er triviel, kræver konstante DOM-opdateringer eller hovedsageligt venter på netværket (asynkron fetch blokerer allerede ikke). Brug dem til ægte CPU-bundet arbejde.
Få det hele til at hænge sammen
Web Workers bytter direkte DOM-adgang og nem datadeling for ægte parallelisme. Brug dem til tunge beregninger, kommunikér via meddelelser, genbrug workers, og overfør store buffere for at holde appen hurtig og responsiv.
Hurtig test
Test din forståelse af anvendelser af workers og deres begrænsninger.
Opsummering
Du har lært om anvendelser af workers og deres begrænsninger:
- De er gode til CPU-tungt arbejde, men har ingen adgang til DOM.
- Mange API'er (
fetch,IndexedDB,crypto) er tilgængelige. - Meddelelser klones struktureret, så funktioner og DOM-noder kan ikke sendes.
- Genbrug workers eller puljer for at fordele opstartsomkostningen.
- Fejl forbliver isoleret i workeren.
Du er færdig med Web Workers. Dernæst: IndexedDB.
Lær JavaScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 59
- Lektioner
- 200
Ofte stillede spørgsmål
Er lektionen “Anvendelser og begrænsninger” gratis?
Ja — alle 3 lektioner i læringssporet JavaScript Academy, inklusive “Anvendelser og begrænsninger”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. JavaScript Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Anvendelser og begrænsninger”?
Lær, hvornår workers er nyttige, og hvad de ikke kan gøre. Du øver dig i JavaScript Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på JavaScript Academy?
Der kræves ingen tidligere erfaring. JavaScript Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Anvendelser og begrænsninger”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne JavaScript Academy-lektion?
Ja. Alle JavaScript Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Oprettelse af en Web Worker
- Kommunikation med postMessage
- Transferable Objects
- Anvendelser og begrænsninger