March 20

HTML веб рабочие API

Веб-работник - это JavaScript, работающий в фоновом режиме, не влияя на производительность страницы.


Что такое веб-работник?

При выполнении скриптов на HTML-странице страница не отвечает до тех пор, пока сценарий не будет завершен.

Веб-работник - это JavaScript, который работает в фоновом режиме, независимо от других скриптов, не влияя на производительность страницы. Вы можете продолжать делать все, что хотите: нажимать, выбирать вещи и т. д., в то время как веб-работник работает в фоновом режиме.


Поддержка браузера

Цифры в таблице указывают первую версию браузера, которая полностью поддерживает Web Workers.

Пример HTML Web Workers

В приведенном ниже примере создается простой веб-работник, который считает числа в фоновом режиме:

Проверьте поддержку веб-работника

Перед созданием веб-работника проверьте, поддерживает ли его браузер пользователя:

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

Создать файл веб-работника

Теперь давайте создадим нашего веб-работника во внешнем JavaScript.

Здесь мы создаем сценарий, который имеет значение. Сценарий хранится в файле "demo_workers.js":

var i = 0;

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

timedCount();

Важной частью кода выше является метод postMessage(), который используется для отправки сообщения на HTML-страницу.

Примечание: Обычно веб-работники используются не для таких простых скриптов, а для более интенсивных задач с процессором.


Создать веб-объект рабочего

Теперь, когда у нас есть файл веб-работника, нам нужно вызвать его со страницы HTML.

Следующие строки проверяют, существует ли рабочий уже, если нет - он создает новый объект веб-работника и запускает код в "demo_workers.js":

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

Затем мы можем отправлять и получать сообщения от веб-работника.

Добавьте прослушиватель события "onmessage" в веб-работник.

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

Когда веб-работник публикует сообщение, выполняется код в прослушивателе события. Данные от веб-работника хранятся в event.data.


Уволить работу с веб-работником

Когда веб-обработник создан, он будет продолжать прослушивать сообщения (даже после завершения внешнего скрипта) до тех пор, пока он не будет завершен.

Чтобы завершить работу веб-работника и бесплатные ресурсы браузера/компьютера, используйте метод terminate():

w.terminate();


Повторное использование веб-работника

Если вы установите рабочую переменную в неопределенное значение, после ее завершения вы можете повторно использовать код:

w = undefined;


Полный пример кода веб-работника

Мы уже видели код Worker в файле .js. Ниже приведен код для HTML-страницы:

Пример

<!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>

Веб-работники и DOM

Поскольку веб-работники находятся во внешних файлах, они не имеют доступа к следующим объектам JavaScript:

  • Объект окна
  • Объект документа
  • Родительский объект