Объект Worker

  Worker - Является интерфейсом к скрипту запущенному методом Worker.
  Такой скрипт выполняется в фоновом режиме в своём собственном пространстве без привязки к какому-либо окну. Поэтому для этого скрипта доступен интерфейс своего пространства, которое создаёт конструктор Worker.
  С помощью интерфейса Worker скрипт, создавший его, может обмениваться информацией со скриптом пространства Worker.
  С помощью технологии Worker можно организовать, например, полноценную работу с SQL базой данных.
  Экземпляр доступен:

  Свойства.
  onerror - Содержит функцию, которая должна быть вызвана, если при выполнении скрипта произойдет ошибка.

Формат записи в коде скрипта:

  • Экземпляр объекта Worker.onerror[ = Функция]

Значения формата записи:

  onmessage - Содержит функцию, которая должна быть вызвана, если от пространства фонового скрипта получено сообщение.

Формат записи в коде скрипта:

  • Экземпляр объекта Worker.onmessage[ = Функция]

Значения формата записи:

  Методы.
  addEventListener - Устанавливает функцию обработчик событий, связанных с пространством фонового скрипта.
  Возвращает значение undefined.

Формат записи в коде скрипта:

  • Экземпляр объекта Worker.addEventListener(Событие, Функция, false)

Значения формата записи:

  • Экземпляр объекта Worker - Любой операнд значения со значением экземпляра объекта Worker.
  • . - Оператор доступа к методу объекта.
  • addEventListener - Ключевое слово.
  • ( - Оператор группировки. Ключевое слово в этом формате.
  • Событие - Имя события, предусмотренного для объекта Worker, заданное в любом строковом формате.
  • Функция - Любой операнд значения со значением функция.
      Значением первого аргумента этой функции, при ее вызове браузером, всегда является экземпляр объекта Event обрабатываемого события.
      Одна функция-обработчик устанавливается методом addEventListener только один раз и повторные вызовы метода для этой же функции не имеют значения.
      Однако другие функции могут быть установлены экземпляру объекта Worker методом addEventListener для этого же события, причем выполняться, в случае возникновения события, они будут в том же порядке, как записаны в скрипте.
  • false - Логическое значение.
  • , - Оператор группировки. Ключевое слово в этом формате.
  • ) - Оператор группировки. Ключевое слово в этом формате.
  dispatchEvent - Инициализирует возникновение заданного события в пространстве фонового скрипта.
  Возвращает значение undefined.
  Инициализированное событие не происходит на самом деле, но инициализация приводит к вызову его обработчика.

Формат записи в коде скрипта:

  • Экземпляр объекта Worker.dispatchEvent(Событие)

Значения формата записи:

  postMessage - Передает сообщение в пространство фонового скрипта.
  Возвращает значение undefined.
  Соответственно в пространстве-получателе возникнет событие message.
  Во избежание коллизий очередности возникновения событий и назначения их обработчиков, в коде фонового скрипта лучше дождаться сообщения о готовности интерфейса обработчиков, и только после этого запускать функционал этого скрипта.

Формат записи в коде скрипта:

URLSC
  • Экземпляр объекта Worker.postMessage(Сообщение)

Значения формата записи:

  • Экземпляр объекта Self - Любой операнд значения со значением экземпляра объекта Self.
  • . - Оператор доступа к методу объекта.
  • postMessage - Ключевое слово.
  • ( - Оператор группировки. Ключевое слово в этом формате.
  • Сообщение - Любой формат данных JavaScript.
      Сообщение будет доступно в свойстве data события message.
      Передаётся не ссылка на данные, а их копия, созданная с преобразованием в формат JSON (JavaScript Object Notation — текстовый формат обмена данными JavaScript) (при получении из порта преобразуются обратно). Соответственно у браузеров есть ограничения на передачу не примитивных объектов.
  • ) - Оператор группировки. Ключевое слово в этом формате.
  removeEventListener - Отменяет функцию обработчик событий установленную методом addEventListener.
  Возвращает значение undefined.

Формат записи в коде скрипта:

  • Экземпляр объекта Worker.removeEventListener(Событие, Функция, false)

Значения формата записи:

  terminate - Безусловно останавливает фоновый скрипт.
  Возвращает значение undefined.
  Скрипт может и сам остановить себя.

Формат записи в коде скрипта:

  • Экземпляр объекта Worker.terminate()

Значения формата записи:


  Для отладки фоновых скриптов большинство браузеров предоставляют отдельный сервис (например - chrome://inspect/#workers), который включает и окно консоли.

Пример.

         Документ:
<BUTTON ID="STARTW">Подключить Worker</BUTTON>
<BUTTON ID="ENDW" DISABLED>Отключить Worker</BUTTON><BR><BR>
<TEXTAREA ID="POSTW" PLACEHOLDER="Введите сообщение" ></TEXTAREA>
    <BUTTON ID="SENDW" DISABLED>Отправить cообщение</BUTTON><BR><BR>
<DIV ID="TOW">Журнал Worker:</DIV>
<SCRIPT>
 var worker = null;
 var sen = null;
 var st = 0;
 var STARTW = document.getElementById("STARTW");
 var POSTW = document.getElementById("POSTW");
 var SENDW = document.getElementById("SENDW");
 var ENDW = document.getElementById("ENDW");
 var TOW = document.getElementById("TOW");
 var res = function(e)
  {
    sen = TOW.innerHTML + "<BR>" + e.data;
    TOW.innerHTML = sen;
    TOW.scrollBy(0,25);
    if (st == 1)
      {
        SENDW.disabled = false;
        ENDW.disabled = false;
        STARTW.disabled = true;
        st = 0;
      }
    if (st == 2)
      {
        SENDW.disabled = true;
        ENDW.disabled = true;
        STARTW.disabled = false;
        st = 1;
      }
  };
 var start = function ()
  {
    worker = new Worker('../script/WWorker.js');
    worker.addEventListener('message', res , false);
    st = 1;
    worker.postMessage(st);
  };
 var stop = function ()
  {
    st = 2;
    worker.postMessage(st);
  };
 var send = function ()
  {
    st = 0;
    worker.postMessage(POSTW.value);
  };
 STARTW.onclick = start;
 SENDW.onclick = send;
 ENDW.onclick = stop;

</SCRIPT>
     WWorker.js:
 var D = null;
 var FF = function(e)
  {
    D = new Date();
    var data = e.data;
    switch (data)
    {
      case 1:
        self.postMessage("" + D.toLocaleString() + "" + " WWorker старт." );
        break;
      case 2:
        self.postMessage("" + D.toLocaleString() + "" + " WWorker финиш." );
        self.close();
        break;
      default:
        self.postMessage("" + D.toLocaleString() + "" + " WWorker получено: " + data + "" );
    };
  }
 self.addEventListener('message', FF , false);

Результат.


    

Журнал Worker: