Web Workers¶
Web Worker представляет собой механизм запуска выполнения скрипта отдельным процессом в фоновом режиме. Причем Web Worker-ы могут создавать другие и так далее. Общение между главным процессом и Web Worker-ами осуществляется с помощью сообщений.
Создание Web Worker через Angular CLI¶
Сперва для примера создадим новый проект.
1 |
|
Теперь для добавления Web Worker в приложение, воспользуйтесь следующей командой Angular CLI.
1 |
|
Здесь в команде app
является компонентом, для которого необходимо создать Angular Web Worker.
Если это первый Web Worker в приложении, то выполнение команды обновит конфигурацию проекта для возможности работы с Angular Web Worker, при этом будет создан файл tsconfig.worker.json
со следующим содержимым
tsconfig.worker.json
1 2 3 4 5 6 7 8 9 |
|
Также будет создан файл app.worker.ts
(в зависимости от компонента название может быть другим), который по умолчанию будет содержать такой код.
app.worker.ts
1 2 3 4 5 6 |
|
А в коде самого компонента app.components.ts
появится следующее.
app.component.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Теперь можно заменить код по умолчанию своей реализацией.
Angular Universal не поддерживает работу Web Worker-ов, поскольку они являются частью браузерного API.
Web Worker API¶
Отправка сообщения из главного процесса Web Worker-у и наоборот осуществляется с использованием метода postMessage()
, параметрами принимающий данные, которые необходимо доставить.
untitled.ts
1 |
|
Получение отправленных данных инициирует событие message
, callback-функции которого аргументом передается экземпляр объекта MessageEvent
, в свойстве data
которого находятся переданные данные.
untitled.ts
1 2 3 |
|
Обработка ошибок осуществляется с помощью события error
.
untitled.ts
1 2 3 4 5 |
|
Объект ошибки имеет следующие свойства:
filename
— имя файла, в котором произошла ошибка;lineno
— номер строки, на которой возникла ошибка;message
— текст ошибки.
Для завершения работы Angular Web Worker-а вызовите у его экземпляра метод terminate()
.
untitled.ts
1 |
|
Выделенные и разделяемые Web Worker-ы¶
Имеется два типа Web Worker-ов: выделенные и разделяемые.
Выделенные Web Worker-ы создаются через new Worker()
и доступны для использования только тому скрипту, который его создал. Параметром конструктору передается путь к скрипту, который должен быть запущен в отдельном процессе.
По умолчанию Angular Web Worker относится к выделенным.
app.component.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
app.worker.ts
1 2 3 4 5 6 |
|
В отличие от выделенных, разделяемые Web Worker-ы доступны множеству скриптов, которые причем могут находиться в разных окнах.
На текущий момент в Angular SharedWorker не включен, а именно отсутствует его тип, который может быть описан вами самостоятельно и далее использован в вашем приложении. Подробнее разделяемых Worker-ах можно узнать здесь.