JavaScript Academy · Les

Berichten uitwisselen met postMessage

Communiceer tussen de hoofdthread en de worker.

Les 2 van 413 stappen

Berichten uitwisselen met postMessage is een gratis JavaScript Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject JavaScript Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus JavaScript Academy bevat in totaal 4 lessen.

Communiceren met berichten

Omdat de hoofdthread en de worker afzonderlijk geheugen hebben, communiceren ze door berichten uit te wisselen. De methode postMessage verstuurt gegevens; de gebeurtenis message ontvangt ze.

Gegevens naar de worker sturen

Roep vanuit de hoofdthread worker.postMessage(data) aan. De gegevens kunnen bijna elke waarde zijn: getallen, tekenreeksen, objecten en arrays.

const worker = new Worker('worker.js');
worker.postMessage({ task: 'sum', numbers: [1, 2, 3, 4] });

Berichten ontvangen in de worker

Verwerk in de worker de gebeurtenis message. De verzonden waarde komt binnen op event.data.

// worker.js
self.onmessage = (event) => {
  const { task, numbers } = event.data;
  console.log('worker received task:', task);
};

Een antwoord versturen

De worker berekent een resultaat en stuurt dit terug met zijn eigen postMessage (met self of de impliciete globale context).

// worker.js
self.onmessage = (event) => {
  const { numbers } = event.data;
  const total = numbers.reduce((a, b) => a + b, 0);
  self.postMessage(total); // send result back
};

Het antwoord ontvangen

Luister op de hoofdthread naar message op het workerobject om het resultaat te ontvangen.

worker.onmessage = (event) => {
  console.log('result from worker:', event.data);
};

Stijl met addEventListener

Je kunt addEventListener('message', ...) gebruiken in plaats van de eigenschap onmessage. Zo zijn meerdere luisterfuncties mogelijk.

worker.addEventListener('message', (event) => {
  console.log('got:', event.data);
});

Structured clone

Berichten worden gekopieerd met het structured clone-algoritme en niet gedeeld. Het verwerkt objecten, arrays, Maps, Sets, Dates en getypeerde arrays, maar geen functies, DOM-knooppunten of methoden van klassen.

// OK to send: numbers, strings, plain objects, arrays,
// Map, Set, Date, ArrayBuffer, typed arrays.
// NOT cloneable: functions, DOM nodes, Error stacks lost.

Een berichtenprotocol

Stuur bij meerdere bewerkingen een veld type mee, zodat de worker weet wat hij moet doen. Zo blijft één worker flexibel.

// main:
worker.postMessage({ type: 'multiply', a: 6, b: 7 });

// worker.js:
self.onmessage = (e) => {
  if (e.data.type === 'multiply') {
    self.postMessage(e.data.a * e.data.b);
  }
};

Verzoeken aan antwoorden koppelen

Voeg bij het versturen van veel berichten een id toe, zodat antwoorden aan hun verzoeken kunnen worden gekoppeld. De worker stuurt de id terug.

// main: worker.postMessage({ id: 42, value: 'x' });
// worker: self.postMessage({ id: e.data.id, done: true });
// main can now match reply id 42 to its request.

Tweerichtingscommunicatie

Berichtenuitwisseling is bidirectioneel en asynchroon. De pagina kan taken blijven versturen terwijl de worker gedeeltelijke resultaten terugstuurt, zonder de gebruikersinterface te blokkeren.

// Worker can report progress repeatedly:
// self.postMessage({ type: 'progress', percent: 50 });
// self.postMessage({ type: 'done', result: data });

Luisterfuncties opruimen

Wanneer een worker niet meer nodig is, verwijder je de luisterfuncties en beëindig je de worker om geheugenlekken te voorkomen. Dit is vooral belangrijk in enkelpagina-apps die herhaaldelijk workers maken.

worker.onmessage = null;
worker.terminate();

Korte toets

Toets je begrip van berichtenuitwisseling met workers.

Samenvatting

Je hebt geleerd hoe berichtenuitwisseling met workers werkt:

  • postMessage(data) verstuurt; de gebeurtenis message ontvangt.
  • Gegevens komen binnen op event.data.
  • Beide kanten kunnen berichten versturen, waardoor communicatie bidirectioneel is.
  • Gegevens worden gekopieerd via structured clone en niet gedeeld.
  • Gebruik een type/id-protocol voor meerdere taken.

Hierna behandelen we overdraagbare objecten voor gegevens zonder kopiëren.

Gratis beginnen

Leer JavaScript met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
59
Lessen
200

Veelgestelde vragen

Is de les “Berichten uitwisselen met postMessage” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad JavaScript Academy, waaronder “Berichten uitwisselen met postMessage”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus JavaScript Academy bevat in totaal 4 lessen.

Wat leer ik in “Berichten uitwisselen met postMessage”?

Communiceer tussen de hoofdthread en de worker. Je oefent met JavaScript Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met JavaScript Academy te beginnen?

Ervaring vooraf is niet nodig. JavaScript Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Berichten uitwisselen met postMessage”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over JavaScript Academy?

Ja. Elke les over JavaScript Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Een Web Worker maken
  2. Berichten uitwisselen met postMessage
  3. Transferable Objects
  4. Toepassingen en beperkingen
← Terug naar JavaScript Academy