Книга: JavaScript. Подробное руководство, 6-е издание

22.4.1. Объект Worker

22.4.1. Объект Worker

Чтобы создать новый фоновый поток, достаточно просто вызвать конструктор Worker(), передав ему URL-адрес, определяющий программный код на языке JavaScript, который должен выполняться в фоновом потоке:

var loader = new Worker("utils/loader.js");

Если указать относительный URL-адрес, он будет интерпретироваться относительно URL-адреса документа, содержащего сценарий, который вызвал конструктор Worker(). Если указать абсолютный URL-адрес, он должен иметь то же происхождение (протокол, имя хоста и порт), что и вмещающий документ.

После создания объекта Worker ему можно отправлять данные с помощью его метода postMessage(). Значение, переданное методу postMessage(), будет скопировано (смотрите врезку «Структурированные копии» выше), и полученная копия будет передана фоновому потоку вместе с событием «message»:

loader.postMessage("file.txt");

Обратите внимание, что, в отличие от метода postMessage() объекта Window, метод postMessage() объекта Worker не имеет аргумента, в котором передавалась бы строка, описывающая происхождение (раздел 22.3). Кроме того, метод postMessage() объекта Worker корректно копирует сообщение во всех текущих броузерах, в отличие от Window. postMessage(), который в некоторых основных броузерах способен принимать только строковые сообщения.

Принимать сообщения от фонового потока можно с помощью обработчика события «message» объекта Worker:

worker.onmessage = function(e) {
  var message = e.data;                  // Извлечь сообщение
  console.log("Содержимое: " + message); // Выполнить некоторые действия
}

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

worker.onerror = function(e) {
  // Вывести текст ошибки, включая имя файла фонового потока и номер строки
  console.log("Ошибка в ” + е.filename + + e.lineno + ": " + е.message);
}

Подобно всем объектам, в которых могут возбуждаться события, объект Worker определяет стандартные методы addEventListener() и removeEventListener(), которые можно использовать вместо свойств onmessage и onerror, если необходимо установить несколько обработчиков событий.

Объект Worker имеет еще один метод, terminate(), который останавливает выполнение фонового потока.

Оглавление книги


Генерация: 1.456. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз