Podczas niedanej premiery Platform Preview IE10 oznaczonej numerem drugim, dowiedzieliśmy się, że Internet Explorer 10 dołączył do grona przeglądarek obsługujących Web Workers. W ten oto sposób, wszystkie najważniejsze desktopowe przeglądarki wspierają tę technologię. Niestety w przypadku mobilnych przeglądarek tylko Opera Mobile umożliwia korzystanie z Web Workers.
Czy w ogóle są Web Workres? Jest to technologia pozwalająca wykonywać skrypty JavaScript w tle, równolegle do głównego wątku, dzięki czemu długo działające skrypty nie blokują interfejsu użytkownika. W dużym uproszczeniu można je porównać do popularnego Ajaxa.
Zasada działania Web Workers jest banalna i sprowadza się do utworzenia obiektu Worker oraz odebrania/wysłania wiadomości do i z skryptu uruchomionego w tle. Warto już na początku wiedzieć, że skrypt uruchomiony w tle nie ma możliwości operować na drzewie DOM. Dlatego wszystkie informacje o konieczności modyfikacji drzewa DOM należy wysłać do głównego skryptu.
Zacznijmy od utworzenia workera.
var worker = new Worker("pracus.js");
Teraz musimy dodać handlera, który będzie reagował na widomości wysyłane przez workera.
worker.onmessage = function(event) {
};
Warto również zdefiniować hadlera przechwytującego błędy.
worker.onerror = function(event) {
};
Jeśli jako workera wskażecie istniejący, ale pusty plik, wówczas zgłoszony zostanie błąd. Dlatego zawsze dodawajcie do pliku workera pustą linię.
Dane odbierane ze skryptu działającego w tle zostały umieszczone we właściwości data. Z kolei informacje o błędzie znajdują się we właściwościach message (treść błędu), filename (nazwa pliku, w którym wystąpił błąd) oraz lineno (wiersz, w którym wystąpił błąd).
Wysłanie wiadomości do workera pracującego w tle odbywa się przy pomocy metody postMessage, wywołanej na obiekcie workera. Wiadomością może być dowolny ciąg, JSON lub dowolny obiekt, który można zserializować. Jedyne czego nie możemy przesłać, to obiekty zawierające metody.
worker.postMessage({
id: 123,
user: "jankowalski"
});
Po zebraniu wszystkiego w jedną całość, uzyskujemy taki oto skrypt.
Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...
Zwiń
Czytaj na blogu autora...