HTML5 Web Workers
Веб-воркер — это JavaScript, работающий в фоновом режиме и не влияющий на производительность страницы.
Что такое веб-воркер?
Когда скрипт выполняется на HTML-странице, страница не отвечает, пока скрипт не завершится.
Веб-воркер — это JavaScript, работающий в фоновом режиме независимо от других скриптов и не влияющий на производительность страницы. Вы можете продолжать делать что угодно: щелкать, выделять содержимое и т. д., пока веб-воркер работает в фоновом режиме.
Поддержка браузеров
![]()
![]()
![]()
![]()
![]()
Internet Explorer 10, Firefox, Chrome, Safari и Opera поддерживают Web Workers.
Пример HTML5 Web Workers
В следующем примере создаётся простой веб-воркер, который выполняет подсчёт в фоновом режиме:
Код файла demo_workers.js
function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
Проверить, поддерживает ли браузер Web Worker
Прежде чем создавать веб-воркер, проверьте, поддерживает ли его браузер пользователя:
if(typeof(Worker)!=="undefined")
{
// 是的! Web worker 支持!
// 一些代码.....
}
else
{
//抱歉! Web Worker 不支持
}
Создание файла веб-воркера
Теперь давайте создадим наш веб-воркер во внешнем JavaScript.
Здесь мы создаём скрипт подсчёта. Скрипт хранится в файле "demo_workers.js":
function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
Важная часть приведённого выше кода — это метод postMessage() — он используется для отправки сообщения обратно на HTML-страницу.
Примечание:Веб-воркеры обычно используются не для таких простых скриптов, а для более ресурсоёмких задач.
Создание объекта веб-воркера
У нас уже есть файл веб-воркера, и теперь нам нужно вызвать его из HTML-страницы.
Следующий код проверяет, существует ли воркер; если нет, — он создаёт новый объект веб-воркера и запускает код в "demo_workers.js":
if(typeof(w)=="undefined")
{
w=new Worker("demo_workers.js");
}
Затем мы можем отправлять и получать сообщения от веб-воркера.
Добавьте прослушиватель события "onmessage" для веб-воркера:
w.onmessage=function(event){
document.getElementById("result").innerHTML=event.data;
};
Завершение веб-воркера
Когда мы создаём объект веб-воркера, он продолжает прослушивать сообщения (даже после завершения внешнего скрипта) до тех пор, пока не будет завершён.
Чтобы завершить веб-воркер и освободить ресурсы браузера/компьютера, используйте метод terminate():
w.terminate();
Полный пример кода веб-воркера
Мы уже видели код Worker в файле .js. Ниже приведён код HTML-страницы:
Пример
Попробуйте сами »
Web Workers и DOM
Поскольку веб-воркеры находятся во внешних файлах, они не могут получить доступ к следующим объектам JavaScript:
- объект window
- объект document
- объект parent