Samouczek HTML

Strona główna HTML Wprowadzenie do HTML Edytory HTML Podstawy HTML Elementy HTML Atrybuty HTML Nagłówki HTML Akapity HTML Style HTML Formatowanie HTML Cytaty HTML Komentarze HTML Kolory HTML HTML CSS Linki HTML Obrazy HTML Ulubione HTML Tabele HTML Listy HTML Blok HTML i wbudowany Klasy HTML Identyfikator HTML Ramki HTML HTML JavaScript Ścieżki plików HTML Nagłówek HTML Układ HTML HTML Responsywne Kod komputerowy HTML Semantyka HTML Przewodnik po stylach HTML Jednostki HTML Symbole HTML Emotikony HTML Zestaw znaków HTML Kodowanie adresu URL HTML HTML a XHTML

Formularze HTML

Formularze HTML Atrybuty formularza HTML Elementy formularza HTML Typy danych wejściowych HTML Atrybuty wejściowe HTML Atrybuty formularza wejściowego HTML

Grafika HTML

Płótno HTML HTML SVG

Media HTML

Media HTML Wideo HTML Dźwięk HTML Wtyczki HTML HTML YouTube

API HTML

Geolokalizacja HTML Przeciągnij/upuść HTML Magazyn sieciowy HTML HTML Web Workers HTML SSE

Przykłady HTML

Przykłady HTML Quiz HTML Ćwiczenia HTML Certyfikat HTML Podsumowanie HTML Dostępność HTML

Odniesienia HTML

Lista znaczników HTML Atrybuty HTML Globalne atrybuty HTML Obsługa przeglądarki HTML Zdarzenia HTML Kolory HTML Płótno HTML HTML audio/wideo Dokumenty HTML Zestawy znaków HTML Kodowanie adresu URL HTML Kody językowe HTML Wiadomości HTTP Metody HTTP Konwerter PX na EM Skróty klawiszowe

API HTML Web Workers


Web worker to skrypt JavaScript działający w tle, który nie wpływa na wydajność strony.


Co to jest pracownik sieciowy?

Podczas wykonywania skryptów na stronie HTML strona przestaje odpowiadać, dopóki skrypt nie zostanie ukończony.

Web worker to JavaScript, który działa w tle, niezależnie od innych skryptów, bez wpływu na wydajność strony. Możesz nadal robić, co chcesz: klikać, wybierać rzeczy itp., podczas gdy pracownik sieciowy działa w tle.


Obsługa przeglądarki

Liczby w tabeli określają pierwszą wersję przeglądarki, która w pełni obsługuje narzędzia Web Workers.

API
Web Workers 4.0 10.0 3.5 4.0 11.5

Przykład HTML Web Workers

Poniższy przykład tworzy prostego robota sieciowego, który liczy liczby w tle:

Przykład

Count numbers:


Sprawdź wsparcie Web Worker

Przed utworzeniem web workera sprawdź, czy przeglądarka użytkownika go obsługuje:

if (typeof(Worker) !== "undefined") {
  // Yes! Web worker support!
  // Some code.....
} else {
  // Sorry! No Web Worker support..
}


Utwórz plik Web Worker

Teraz stwórzmy naszego webworkera w zewnętrznym JavaScript.

Tutaj tworzymy skrypt, który się liczy. Skrypt jest przechowywany w pliku „demo_workers.js”:

var i = 0;

function timedCount() {
  i = i + 1;
  postMessage(i);
  setTimeout("timedCount()",500);
}

timedCount();

Ważną częścią powyższego kodu jest postMessage()metoda - która służy do wysyłania wiadomości z powrotem na stronę HTML.

Uwaga: Zwykle pracownicy sieci Web nie są wykorzystywani do takich prostych skryptów, ale do zadań bardziej obciążających procesor.


Utwórz obiekt Web Worker

Teraz, gdy mamy już plik Web Worker, musimy wywołać go ze strony HTML.

Poniższe wiersze sprawdzają, czy worker już istnieje, jeśli nie – tworzy nowy obiekt web worker i uruchamia kod w „demo_workers.js”:

if (typeof(w) == "undefined") {
  w = new Worker("demo_workers.js");
}

Następnie możemy wysyłać i odbierać wiadomości od pracownika sieci.

Dodaj detektor zdarzeń „onmessage” do pracownika sieci Web.

w.onmessage = function(event){
  document.getElementById("result").innerHTML = event.data;
};

Gdy pracownik sieciowy opublikuje komunikat, wykonywany jest kod w detektorze zdarzeń. Dane od pracownika sieci są przechowywane w event.data.


Zakończ pracę Web Workera

Po utworzeniu obiektu Web Worker będzie on nadal nasłuchiwał komunikatów (nawet po zakończeniu skryptu zewnętrznego) aż do jego zakończenia.

Aby usunąć pracownika WWW i uwolnić zasoby przeglądarki/komputera, użyj terminate()metody:

w.terminate();

Ponowne użycie narzędzia Web Worker

Jeśli ustawisz zmienną roboczą na undefined, po jej zakończeniu możesz ponownie użyć kodu:

w = undefined;

Pełny przykładowy kod Web Worker

Widzieliśmy już kod Worker w pliku .js. Poniżej znajduje się kod strony HTML:

Przykład

<!DOCTYPE html>
<html>
<body>

<p>Count numbers: <output id="result"></output></p>
<button onclick="startWorker()">Start Worker</button>
<button onclick="stopWorker()">Stop Worker</button>

<script>
var w;

function startWorker() {
  if (typeof(Worker) !== "undefined") {
    if (typeof(w) == "undefined") {
      w = new Worker("demo_workers.js");
    }
    w.onmessage = function(event) {
      document.getElementById("result").innerHTML = event.data;
    };
  } else {
    document.getElementById("result").innerHTML = "Sorry! No Web Worker support.";
  }
}

function stopWorker() {
  w.terminate();
  w = undefined;
}
</script>

</body>
</html>

Web Workers i DOM

Ponieważ pracownicy sieci Web znajdują się w plikach zewnętrznych, nie mają dostępu do następujących obiektów JavaScript:

  • Obiekt okna
  • Przedmiot dokumentu
  • Obiekt nadrzędny