Webový pracovník - Web worker

Web pracovníka , jak je definováno World Wide Web Consortium (W3C) a Hypertext Application Working Group Web Technology (WHATWG), je JavaScript skript spuštěn z HTML stránky, které běží na pozadí , nezávisle na skripty, které mohou také byli spuštěno ze stejné stránky HTML. Weboví pracovníci jsou často schopni efektivněji využívat vícejádrové procesory .

W3C a WHATWG si představují webové pracovníky jako dlouhotrvající skripty, které nejsou přerušovány skripty reagujícími na klikání nebo jiné interakce uživatelů. Zabránění tomu, aby byli tito pracovníci vyrušováni činnostmi uživatelů, by mělo umožnit, aby webové stránky zůstaly reagovat současně se spuštěním dlouhých úkolů na pozadí.

Nejjednodušší použití pracovníků je pro provádění výpočetně nákladných úkolů bez přerušení uživatelského rozhraní.

Specifikace webového pracovníka je součástí HTML Living Standard.

Přehled

Jak předpokládá WHATWG, weboví pracovníci jsou relativně těžcí a nejsou určeny k použití ve velkém množství. Očekává se, že budou mít dlouhou životnost, vysoké náklady na výkon při spuštění a vysoké náklady na paměť pro každou instanci.

Weboví pracovníci běží mimo kontext skriptů dokumentu HTML. V důsledku toho, i když nemají přístup k DOM , mohou usnadnit souběžné spouštění programů JavaScript.

Funkce

Weboví pracovníci komunikují s hlavním dokumentem prostřednictvím předávání zpráv . Následující kód vytvoří Worker, který spustí JavaScript v daném souboru.

var worker = new Worker("worker_script.js");

K odeslání zprávy pracovníkovi se použije postMessagemetoda pracovního objektu, jak je znázorněno níže.

worker.postMessage("Hello World!");

Tato onmessagevlastnost používá k načtení informací od pracovníka obslužnou rutinu události.

worker.onmessage = function(event) {
	alert("Received message " + event.data);
	doSomething();
}
	
function doSomething() {
	//do work
	worker.postMessage("Work done!");
}

worker.terminate();

Jakmile je pracovník ukončen, jde mimo rozsah a proměnná, na kterou se odkazuje, se stane nedefinovanou; v tomto okamžiku musí být v případě potřeby vytvořen nový pracovník.

Příklad

Nejjednodušší použití webových pracovníků je pro provádění výpočetně nákladných úkolů bez přerušení uživatelského rozhraní.

V tomto příkladu hlavní dokument vytvoří webového pracovníka pro výpočet prvočísel a postupně zobrazí naposledy nalezené prvočíslo.

Hlavní stránka je následující:

<!DOCTYPE html>
<html>
 <head>
  <title>Worker example: One-core computation</title>
 </head>
 <body>
  <p>The highest prime number discovered so far is: <output id="result"></output></p>
  <script>
   var worker = new Worker('worker.js');
   worker.onmessage = function (event) {
     document.getElementById('result').textContent = event.data;
   };
  </script>
 </body>
</html>

Worker()Konstruktor volání vytvoří webové pracovníka a vrátí workerobjekt představující danou webovou pracovníka, který se používá pro komunikaci s webovým pracovníkem. onmessageObslužná rutina události tohoto objektu umožňuje kódu přijímat zprávy od webového pracovníka.

Samotný Web Worker je následující:

var n = 1;
var end_value = 10**7;
search: while (n <= end_value) {
  n++;
  for (var i = 2; i <= Math.sqrt(n); i++)
    if (n % i == 0)
      continue search;
  // found a prime!
  postMessage(n);
}

K odeslání zprávy zpět na stránku se postMessage()metoda používá k odeslání zprávy, když je nalezeno prvočíslo.

Podpěra, podpora

Pokud prohlížeč podporuje webové pracovníky, bude v objektu globálního okna k dispozici vlastnost Worker. Vlastnost Worker bude nedefinována, pokud ji prohlížeč nepodporuje.

Následující příklad kódu kontroluje podporu webového pracovníka v prohlížeči

function browserSupportsWebWorkers() {
  return typeof window.Worker === "function";
}

Webové pracovníky v současné době podporují prohlížeče Chrome , Opera , Edge , Internet Explorer (verze 10), Mozilla Firefox a Safari . Mobile Safari pro iOS podporuje webové pracovníky od iOS 5. Prohlížeč Android nejprve podporoval webové pracovníky v systému Android 2.1, ale podpora byla ve verzích Android 2.2–4.3 odstraněna, než byla obnovena v systému Android 4.4.

Reference

externí odkazy