Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

Наибольший интерес представляет глобальная функция

importScripts,
определяемая объектом
WorkerGlobalScope
: фоновые потоки выполнения могут использовать ее для загрузки любых необходимых им библиотек. Например:

// Перед началом работы загрузить необходимые классы и утилиты

importScripts("collections/Set.js", "collections/Map.js", "utils/base64.js");

Функция

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

Функция

importScripts
выполняется синхронно: она не вернет управление, пока не будут загружены и выполнены все сценарии. Сценарии, указанные в вызове функции
importScripts,
можно использовать сразу, как только она вернет управление: нет никакой необходимости определять функцию обратного вызова или обработчик события. После того как вы свыклись с асинхронной природой клиентского JavaScript, такой возврат к простой, синхронной модели может показаться странным. Но в этом и заключается достоинство потоков выполнения: в фоновом потоке можно использовать блокирующие функции, не блокируя цикл событий в основном потоке выполнения и не блокируя вычисления, выполняемые параллельно в других фоновых потоках.

Поскольку для фоновых потоков выполнения

WorkerGlobalScope
является глобальным объектом, он обладает всеми свойствами базового глобального объекта JavaScript, такими как объект
JSON
, функция
isNaN
и конструктор
Date
. (Полный список можно найти в справочной статье
Global
, в третьей части книги.) Однако, кроме того, объект
WorkerGlobalScope
имеет следующие свойства клиентского объекта
Window
:

•

self
– ссылка на сам глобальный объект. Отметьте, однако, что в объекте
WorkerGlobalScope
отсутствует синонимичное свойство window, имеющееся в объекте
Window
.

Модель выполнения фонового потока

Фоновые потоки выполняют свой программный код (и все импортированные сценарии) синхронно, от начала до конца, и затем переходят в асинхронную фазу выполнения, когда они откликаются на события и таймеры. Если фоновый поток регистрирует обработчик события onmessage, он никогда не завершит работу, пока есть вероятность поступления событий «message». Но если фоновый поток не принимает сообщения, он будет работать, пока не будут выполнены все задания (такие как загрузка или таймеры) и не будут вызваны все функции, связанные с этими заданиями. После вызова всех зарегистрированных функций обратного вызова в фоновом потоке нет никакой возможности начать выполнять новые задания, поэтому он может смело завершить свою работу. Представьте себе фоновый поток без обработчика событий onmessage, который загружает файл с помощью объекта XMLHttpRequest. Если обработчик onload запустит загрузку другого файла или зарегистрирует обработчик таймера вызовом функции setTimeout, поток выполнения получит новое задание и продолжит работу. Иначе он завершится.

************************************************

• Методы работы с таймерами

setTimeout, clearTimeout, setInterval
и
clearInterval.

• Свойство

location
, содержащее URL-адрес, переданный конструктору
Worker
( Это свойство ссылается на объект
Location
, как и аналогичное ему свойство location объекта
Window
. Объект Location имеет свойства
href, protocol, host, hostname, port, pathname, search
и
hash
. В фоновом потоке эти свойства доступны только для чтения.

• Свойство

navigator
, ссылающееся на объект, обладающий теми же свойствами, что и объект
Navigator
окна. Объект
navigator
фонового потока имеет свойства
appName, appVersion, platform, userAgent
и
onLine
.

• Обычные методы объектов, в которых могут возбуждаться события:

addEventListener
и
removeEventListener.

• Свойство

onerror
, которому можно присвоить функцию обработки ошибок, подобное свойству
Window.onerror
, которое описывается в разделе 14.6. Обработчик ошибок, если его зарегистрировать, будет получать три аргумента с сообщением об ошибке, URL-адресом и номером строки. Он может вернуть false, чтобы показать, что ошибка обработана и не должна распространяться дальше в виде события «error» в объекте
Worker
. (Однако на момент написания этих строк обработка ошибок в разных броузерах была реализована несовместимым способом.)

  • Читать дальше
  • 1
  • ...
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: