Samouczek JS

JS DOM Wprowadzenie do JS JS Dokąd Wyjście JS Oświadczenia JS Składnia JS Komentarze JS Zmienne JS JS Let JS Const Operatorzy JS Arytmetyka JS Zadanie JS Typy danych JS Funkcje JS Obiekty JS Wydarzenia JS JS Strings Metody ciągów JS Wyszukiwanie ciągów JS Szablony JS String Numery JS Metody liczbowe JS Tablice JS Metody macierzowe JS Sortowanie tablic JS Iteracja tablicy JS JS Array Const JS Daty Formaty daty JS JS Data Pobierz metody Metody ustawiania daty JS Matematyka JS JS losowo JS Booleans Porównania JS Warunki JS Przełącznik JS Pętla JS dla Pętla JS dla In Pętla JS dla Of Pętla JS, podczas gdy Przerwa JS Iterable JS Zestawy JS Mapy JS Typ JS Konwersja typu JS JS Bitwise JS RegExp Błędy JS Zakres JS JS Podnoszenie Tryb ścisły JS JS to słowo kluczowe Funkcja strzałki JS Klasy JS JS JSON Debugowanie JS Przewodnik po stylu JS Najlepsze praktyki JS Błędy JS Wydajność JS JS słowa zastrzeżone

Wersje JS

Wersje JS JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Krawędź Historia JS

Obiekty JS

Definicje obiektów Właściwości obiektu Metody obiektowe Wyświetlanie obiektów Akcesoria do obiektów Konstruktorzy obiektów Prototypy obiektów Iterowalne obiekty Zestawy obiektów Mapy obiektów Odniesienie do obiektu

Funkcje JS

Definicje funkcji Parametry funkcji Wywołanie funkcji Wywołanie funkcji Funkcja Zastosuj Zamknięcia funkcji

Klasy JS

Wprowadzenie do zajęć Dziedziczenie klas Klasa statyczna

JS Async

Oddzwaniania JS Asynchroniczny JS JS Obietnice JS Async/Oczekiwanie

JS HTML DOM

Wprowadzenie do DOM Metody DOM Dokument DOM Elementy DOM DOM HTML Formularze DOM DOM CSS Animacje DOM Wydarzenia DOM Odbiornik zdarzeń DOM Nawigacja DOM Węzły DOM Kolekcje DOM Listy węzłów DOM

Zestawienie komponentów przeglądarki JS

Okno JS Ekran JS Lokalizacja JS Historia JS JS Navigator Wyskakujący alert JS Czas JS Pliki cookie JS

JS Web API

Wprowadzenie do internetowego interfejsu API Interfejs API formularzy internetowych Interfejs API historii online API przechowywania danych w sieci Web Web Worker API Internetowy interfejs API pobierania Internetowy interfejs API geolokalizacji

JS AJAX

Wprowadzenie do AJAX AJAX XMLHttp Żądanie AJAX Odpowiedź AJAX Plik XML AJAX AJAX PHP ASP AJAX Baza danych AJAX Aplikacje AJAX Przykłady AJAX

JS JSON

Wprowadzenie do JSON Składnia JSON JSON a XML Typy danych JSON Analiza JSON JSON Obiekty JSON Tablice JSON Serwer JSON JSON PHP JSON HTML JSON JSONP

JS kontra jQuery

Selektory jQuery jQuery HTML jQuery CSS jQuery DOM

Grafika JS

Grafika JS JS płótno JS Działka JS Chart.js Wykres JS Google JS D3.js

Przykłady JS

Przykłady JS JS HTML DOM Wejście JS HTML Obiekty HTML JS Wydarzenia JS HTML Przeglądarka JS Edytor JS Ćwiczenia JS JS Quiz Certyfikat JS

Referencje JS

Obiekty JavaScript Obiekty HTML DOM


Web Workers API


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ą pierwsze wersje przeglądarek, które w pełni obsługują Web Workers:

Chrome 4 IE 10 Firefox 3.5 Safari 4 Opera 11.5
Jan 2010 Sep 2012 Jun 2009 Jun 2009 Jun 2011

Przykład 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”:

let i = 0;

function timedCount() {
  i ++;
  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>
let w;

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

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