stringtranslate.com

Веб-работник

Веб -воркер , как определено Консорциумом Всемирной паутины (W3C) и Рабочей группой по технологиям веб-гипертекстовых приложений (WHATWG), представляет собой скрипт JavaScript, выполняемый с HTML -страницы, которая работает в фоновом режиме , независимо от скриптов, которые также могли быть выполнены с той же HTML-страницы. [1] Веб-воркеры часто способны более эффективно использовать многоядерные процессоры . [2]

W3C и WHATWG рассматривают веб-работников как долго работающие скрипты, которые не прерываются скриптами, реагирующими на щелчки или другие действия пользователя. Предотвращение прерывания таких работников действиями пользователя должно позволить веб-страницам оставаться отзывчивыми, в то же время выполняя длительные задачи в фоновом режиме.

Спецификация веб-воркера является частью HTML Living Standard. [1]

Обзор

По замыслу WHATWG, веб-воркеры относительно тяжеловесны и не предназначены для использования в больших количествах. Ожидается, что они будут долгоживущими, с высокой стоимостью начальной производительности и высокой стоимостью памяти на экземпляр. [1]

Веб-работники работают вне контекста скриптов HTML-документа. Следовательно, хотя у них нет доступа к DOM , они могут способствовать одновременному выполнению программ JavaScript.

Функции

Веб-воркеры взаимодействуют с основным документом посредством передачи сообщений . Следующий код создает Worker, который выполнит JavaScript в указанном файле.

var worker = new Worker ( "worker_script.js" );    

Для отправки сообщения работнику postMessageиспользуется метод объекта работника, как показано ниже.

worker.postMessage ( "Привет, мир! " ) ;

Свойство onmessageиспользует обработчик событий для получения информации от работника.

worker.onmessage = function ( event ) { alert ( "Получено сообщение" + event.data ) ; doSomething ( ) ; } function doSomething ( ) { // выполнить работу worker.postMessage ( "Работа выполнена!" ); }       работник . завершить ();

После завершения работы рабочего процесса он выходит из области действия, а ссылающаяся на него переменная становится неопределенной; в этот момент при необходимости необходимо создать нового рабочего процесса.

Пример

Простейшим применением веб-воркеров является выполнение ресурсоемких вычислительных задач без прерывания работы пользовательского интерфейса.

В этом примере основной документ запускает веб-воркер для вычисления простых чисел и постепенно отображает последнее найденное простое число.

Главная страница выглядит следующим образом:

<!DOCTYPE html> < html >  < head >  < title > Пример Worker: одноядерные вычисления </ title >  </ head >  < body >  < p > Наибольшее простое число, обнаруженное на данный момент: < output  id = "result" ></ output ></ p >  < script > var worker = new Worker ( 'worker.js' ); worker . onmessage = function ( event ) { document . getElementById ( 'result' ). textContent = event . data ; }; </ script > </ body > </ html >                

Вызов конструктора Worker()создает веб-воркера и возвращает workerобъект, представляющий этого веб-воркера, который используется для связи с веб-воркером. onmessageОбработчик событий этого объекта позволяет коду получать сообщения от веб-воркера.

Сам Web Worker выглядит следующим образом:

var n = 1 ; var end_value = 10 ** 7 ; поиск : while ( n <= end_value ) { n ++ ; for ( var i = 2 ; i <= Math . sqrt ( n ); i ++ ) if ( n % i == 0 ) продолжить поиск ; // найдено простое число! postMessage ( n ); }                               

Чтобы отправить сообщение обратно на страницу, postMessage()используется метод публикации сообщения при обнаружении простого числа. [1]

Поддерживать

Если браузер поддерживает веб-воркеров, свойство Worker будет доступно в глобальном объекте окна. [3] Свойство Worker будет неопределенным, если браузер его не поддерживает.

Следующий пример кода проверяет поддержку веб-воркера в браузере.

function browserSupportsWebWorkers () { return typeof window.Worker === " function " ; }       

В настоящее время веб-воркеры поддерживаются Chrome , Opera , Edge , Internet Explorer (версия 10), Mozilla Firefox и Safari . [4] [5] [6] Мобильный Safari для iOS поддерживает веб-воркеры с iOS 5. Браузер Android впервые поддержал веб-воркеры в Android 2.1, но поддержка была удалена в версиях Android 2.2–4.3, прежде чем была восстановлена ​​в Android 4.4. [7] [8]

Ссылки

  1. ^ abcd Web Workers, WHATWG , получено 2 января 2023 г.
  2. ^ "HTML Living Standard". Html.spec.whatwg.org . 30 января 2017 г. Получено 31 января 2017 г.
  3. ^ "HTML5 Up and Running" Марк Пилигрим. O'Reilly/Google Press. Август 2010 г.
  4. ^ «Введение в HTML5», Лоусон, Б. и Шарп, Р., 2011.
  5. ^ «HTML5 и CSS3» Брайан П. Хоган. The Pragmatic Programmers, LLC 2010.
  6. ^ "Могу ли я использовать... Web Worker". caniuse.com . Получено 30 сентября 2019 г. .
  7. ^ "Spotlight: Benchmarking Android 2.1 with Web Workers - Isogenic Engine". Архивировано из оригинала 19 октября 2013 г. Получено 10 июля 2011 г.
  8. ^ "Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.". caniuse.com . Получено 10 июня 2017 г. .

Внешние ссылки