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(), который останавливает выполнение фонового потока.
Больше книг — больше знаний!
Заберите 30% скидку новым пользователям на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ