Pracownik sieciowy
Pracownik sieci Web , zgodnie z definicją konsorcjum World Wide Web Consortium (W3C) i Web Hypertext Application Technology Working Group (WHATWG), to skrypt JavaScript, który działa w tle na stronie HTML niezależnie od skryptów interfejsu użytkownika. [1] Pracownicy sieci Web często są w stanie wydajniej korzystać z wielordzeniowych procesorów . [2]
W3C i WHATWG traktują pracowników sieci jako długo działające skrypty, które nie są przerywane przez skrypty interfejsu użytkownika (które reagują na kliknięcia lub inne interakcje użytkownika). Zapobieganie przerywaniu takich pracowników przez aktywność użytkownika powinno umożliwić stronom internetowym zachowanie odpowiedzi podczas wykonywania długotrwałych zadań w tle.
W3C i WHATWG są obecnie w trakcie opracowywania definicji API dla pracowników sieci Web. [1]
Przegląd
Zgodnie z koncepcją WHATWG, pracownicy sieciowi są stosunkowo ciężcy. Mają być długowieczne, z wysokim kosztem wydajności rozruchu i wysokim kosztem pamięci na instancję. [1] W związku z tym nie powinny być używane w dużych ilościach, ponieważ mogą zmonopolizować zasoby systemowe.
Pracownicy sieci Web pozwalają wątkom przeglądarki działać w konkurencji z co najmniej jednym wątkiem JavaScript działającym w tle. Zwykle przeglądarka, która podąża za pojedynczym wątkiem wykonania, musi poczekać na zakończenie wykonywania programów JavaScript przed kontynuowaniem, a to może zająć dużo czasu, który programista może chcieć ukryć przed użytkownikiem. Pracownicy sieci Web umożliwiają przeglądarce kontynuowanie normalnych operacji, podczas gdy skrypt działa w tle.
Specyfikacja Web Worker jest oddzielna od specyfikacji HTML5 [3] i może być używana z HTML5.
Istnieją dwa rodzaje pracowników internetowych: [1] dedykowane i współdzielone.
Gdy pracownicy sieciowi działają w tle, nie mają bezpośredniego dostępu do DOM, ale komunikują się z dokumentem poprzez wymianę wiadomości . Pozwala to na wielowątkowe wykonywanie programów JavaScript.
Funkcje
Pracownicy sieci Web wchodzą w interakcję z głównym dokumentem, przekazując wiadomości. Poniższy kod tworzy proces roboczy, który wykona kod JavaScript w określonym pliku.
var worker = nowy pracownik ( "worker_script.js" );
Aby wysłać wiadomość do pracownika, używamy postMessagemetody obiektu pracownika, jak pokazano w następnym przykładzie.
pracownik . postMessage ( "Witaj świecie!" );
Właściwość onmessageużywa procedury obsługi zdarzeń do pobierania informacji z procesu roboczego.
pracownik . onmessage = function ( zdarzenie ) {
alert ( " Odebrana wiadomość " + zdarzenie . dane );
zrobićCoś ();
}
function doSomething () {
// czy praca
pracownik . postMessage ( "Praca wykonana!" );
}
pracownik . zakończyć ();
Po zakończeniu pracy pracownik staje się poza zakresem, a zmienna, do której się odnosi, staje się niezdefiniowana; w tym momencie musimy w razie potrzeby utworzyć nowego pracownika.
Przykład
Najprostszym zastosowaniem pracowników internetowych jest wykonywanie kosztownych obliczeniowo zadań bez uszkadzania interfejsu użytkownika.
W tym przykładzie dokument główny tworzy robota sieciowego do obliczania liczb pierwszych i progresywnie wyświetla ostatnią znalezioną liczbę pierwszą.
Strona główna w następujący sposób:
<!DOCTYPE html>
< html >
< head >
< title > Przykład procesu roboczego: obliczenia jednordzeniowe </ title >
</ head >
< body >
< p > Najwyższa odkryta do tej pory liczba pierwsza to: < output id = "result " > </ output > </ p >
< script >
var worker = new Worker ( 'worker.js' );
pracownik . onmessage = funkcja ( zdarzenie ) {
dokument . getElementById ( 'wynik' ). textContent = zdarzenie . data ;
};
</ skrypt >
</ body >
</ html >
Wywołanie konstruktora Worker()tworzy pracownika WWW i zwraca obiekt worker, który służy do komunikacji z pracownikiem WWW. Procedura obsługi zdarzeń obiektu onmessageumożliwia kodowi odbieranie komunikatów od pracownika sieci Web. Sam Web Worker przedstawia się następująco:
zmn = 1 ; _ zmienna wartość_końcowa = 10 ** 7 ; szukaj : while ( n <= wartość_końcowa ) { n ++ ; for ( var i = 2 ; i <= Math . sqrt ( n ); i ++ ) if ( n % i == 0 ) kontynuuj wyszukiwanie ; // znaleziono liczbę pierwszą! postWiadomość ( n ); }
Aby wysłać wiadomość do strony po znalezieniu nowej liczby pierwszej, użyj metody postMessage().
Wsparcie
Obsługa przeglądarki dla pracowników sieci Web może być kontrolowana przez właściwość Worker w globalnym obiekcie okna [4] , która będzie niezdefiniowana, jeśli przeglądarka ich nie obsługuje.
Poniższy przykładowy kod sprawdza obsługę Web Worker w przeglądarce:
function browserSupportsWebWorkers () {
return typeof window . Pracownik === "funkcja" ;
}
Webworkers są obecnie obsługiwane przez przeglądarki Chrome , Opera , Internet Explorer (wersja 10), Mozilla Firefox i Safari . [3] [5] Mobilne Safari dla iOS obsługuje webworkerów z iOS 5. Przeglądarka Android zaczęła je obsługiwać w Androidzie 2.1, ale obsługa została usunięta w Androidzie w wersjach 2.2-4.3, zanim została przywrócona w Androidzie 4.4. [6] [7]
Notatki
- ^ a b c d Web Workers , WHATWG . Źródło 3 czerwca 2010 .
- ^ Standard życia HTML , na Html.spec.whatwg.org , 30 stycznia 2017. Pobrano 31 stycznia 2017 .
- ^ a b „Wprowadzenie HTML5”, Lawson, B. i Sharp, R., 2011.
- ^ „HTML5 działa i działa” Mark Pilgrim. O'Reilly / Google Press. Sierpień 2010
- ^ „HTML5 i CSS3” Brian P. Hogan. Pragmatyczni programiści, LLC 2010.
- ^ Kopia archiwalna , na isogenicengine.com . Pobrano 10 lipca 2011 (zarchiwizowane z oryginału w dniu 19 października 2013) .
- ^ Czy mogę używać... Tabele pomocy dla HTML5, CSS3, itp , na caneuse.com . Źródło 10 czerwca 2017 .
Linki zewnętrzne
- Pracownicy sieci - W3C
- Web Workers - WHATWG
- Korzystanie z Web Workers zarchiwizowanych 7 maja 2012 r. w Internet Archive . - Sieć programistów Mozilli