Книга: 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(),
который останавливает выполнение фонового потока.
- WorkerNavigator
- WorkerLocation
- Листинг 8.5. Тестовый пример, демонстрирующий уменьшение объема памяти, распределяемой для объектов (типичный образец ул...
- Листинг 8.5. Тестовый пример, демонстрирующий уменьшение объема памяти, распределяемой для объектов (типичный образец ул...
- 1.1. Введение в объектно-ориентированное программирование
- ЧАСТЬ IV. База данных и ее объекты.
- 1.1.1. Что такое объект
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Физические объекты
- Иерархия объектов в InterBase
- Имена объектов длиной 68 символов
- Создание объектов Collection