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:
- Объект окна
 - Объект документа
 - Родительский объект
 

        