Threading

Worker

Über Worker-Objekte können Programmfunktionen in einen eigenen Thread ausgelagert werden. Dies erlaubt es, dass rechenintensive Funktionen das User-Interface nicht blockieren. Neue Worker können direkt über den Konstruktor new Worker(url) gestartet werden. Alvine bietet zwei Hilfsfunktionen an, die einen Worker erstellen.

Alvine.Threading.Factory.createWorkerFromURL(url, message, error) erstellt einen Worker und hängt die Messagehandler message und error ein. Diese Callbacks werden im Falle einer eingehenden Nachricht oder eines Fehler aufgerufen.

Die Funktion Alvine.Threading.Factory.createWorkerFromScriptTag erlaubt das Erstellen eines Inline-Workers. Durch die Angabe des MimeTypes javascript/worker im Script-Tag, wird dieses Script nicht direkt ausgeführt, sondern erst über die Factory-Funktion als Worker ausgeführt.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>

    <!-- Wichtig: Mimetype javascript/worker -->
    <script id="worker1" type="javascript/worker">
    self.onmessage = function(e) {
        // e.data -> startmessage
        self.postMessage('message from worker');
    };
    </script>

    <script>

    worker = Alvine.Threading.Factory.createWorkerFromScriptTag('#worker1', function(e) {
        // e.data -> message from worker
    });

    // Worker starten
    worker.postMessage('startmessage');

    </script>
</body>
</html>