ЛУЧШИЙ САЙТ ДЛЯ ВЕБ-РАЗРАБОТЧИКОВ
HTML5. Уроки для начинающих

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


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


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

Во время выполнения скриптов на странице HTML страница перестаёт отвечать, пока сценарий (выполнение скрипта) не закончится.

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


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

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

API
Веб-работники 4.0 10.0 3.5 4.0 11.5

HTML Веб-работник. Пример

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

Пример

Считать числа:

Попробуйте сами »

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

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

if (typeof(Worker) !== "undefined") {
  // Да! Веб-работник поддерживается!
  // Какой-то код.....
} else {
  // Извините! Веб-работник не поддерживается..
}

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

Теперь давайте создадим нашего веб-работника во внешнем 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();

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

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

w = undefined;

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

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

Пример

<!DOCTYPE html>
<html>
<body>

<p>Считать числа: <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 = "К сожалению веб-работник не поддерживается.";
  }
}

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

</body>
</html>
Попробуйте сами »

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

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

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