Java Reference
In-Depth Information
arbeitet, und sie macht die Ausführung des Hintergrundprozesses ausreichend
zeitintensiv, dass Sie etwas erkennen können. Bei vielen Aufgaben in der Praxis
wird es jedoch ausreichend sein, wenn die Methode postMessage() zur Rück-
gabe eines Ergebnisses nur einmal am Ende des Algorithmus aufgerufen wird. In
der Tat macht der permanente Aufruf dieser Ausgabemethode aktuell sogar Pro-
bleme in einigen Browsern, die im Grunde Web Worker unterstützen. Von daher
sollten Sie Meldungen des Web Worker in der Praxis nicht zu häuig abfeuern.
Theoretisch muss die Methode postMessage() gar nicht aufgerufen werden,
wenn die Arbeit des Web Worker ohne eine Ergebnismeldung erledigt werden
kann. Das ist aber eher unüblich.
Bild 14.1■ Ein Hintergrundprozess bei der Arbeit - trotzdem kann der Anwender mit der Webseite
interagieren.
HInWEIS: Ein Web Worker sollte zwar die Webseite, von der aus er gestartet
wurde, nicht blockieren. Aber er kann den Browser insofern blockieren, dass Sie
nicht mehr zu anderen Webseiten, die im Browser parallel geöfnet sind, wech-
seln können, solange der Web Worker arbeitet. Selbst das Schließen des Brow-
sers kann blockiert werden, wobei man wie erwähnt auch festhalten muss, dass
Web Worker erstens noch nicht in allen Browsern funktionieren und da, wo sie
implementiert sind, sicher noch in zuküntigen Versionen stabiler laufen.
Daten austauschen und Logik im Worker steuern
Wir haben gerade gesehen, dass der Web Worker an die Callback-Funktion Daten per
postMessage() schicken kann, die per onmessage oder onerror diese bindet. Dabei kann
jeder Datentyp übergeben werden, den JavaScript unterstützt, also nicht nur Strings, son-
dern vor allen Dingen auch JSON bzw. allgemein Objekte. Das macht die Sache natürlich
sehr lexibel. Vor allen Dingen geht die Kommunikation nicht nur vom Worker zum Auf-
rufer, sondern der Aufrufer kann auch dem Worker per postMessage() Daten übergeben.
Dort stehen die Daten über den Parameter des Callback bei self.onmessage oder
self.addEventListener() genauso zur Verfügung. Beachten Sie allerdings, dass sie in
dem eigentlichen Worker wie gesagt keinen Timer wie mit den DOM-Methoden verfügbar
haben. Betrachten wir das folgende Beispiel (kap14_2.html) :
Listing 14.7■ Die neue Webseite
...
<script type="text/javascript" src="lib/js/kap14_2.js"></script>
</head>
 
Search WWH ::




Custom Search