2012-05-08 3 views
0

HTML5 WebWorkers выглядят очень многообещающими, но на данный момент они не поддерживаются IE8. Я создаю бизнес Saas, и я должен поддерживать этот браузер, по крайней мере, еще 2 года.javascript многопоточность WebWorkers на IE8

Что произойдет, если я начну внедрять поток веб-работников и запускать его на IE8? Будет ли он работать только в одном потоке или просто не работает?

Спасибо.

+0

Вы попробовали? Что случилось? – epascarello

+0

Не пробовал, это не на том этапе; просто посмотрев, что произойдет, если я это сделаю. Ты это пробовал? – frenchie

+1

Занимает 40 секунд, чтобы сделать демо! Или протестируйте одну из демоверсий онлайн. :) – epascarello

ответ

6

Вы получите сообщение об ошибке, поскольку API для создания веб-рабочих просто не существует в IE.

например.

var worker = new Worker('my_task.js'); 

Вызвать ошибку, поскольку рабочий не определен.

Если вы хотите сделать функцию обнаружения, вы можете проверить первый перед созданием рабочего:

if(window.Worker !== undefined){ 
    var worker = new Worker('my_task.js'); 
} 

Конечно, какую бы задачу вы делегированы WebWorker не будет происходить на неподдерживаемых браузеров, что означает, что вам нужно будет запустить логику в основном (не рабочем) контексте.

Поскольку вы отправляете сообщение (и слушаете сообщения о событиях/сообщениях) с WebWorkers, если вы выполняете тот же подход к своей рабочей задаче, вы можете просто запустить его в своем основном контексте и сделать вызовы к нему таким же образом, как и если бы это был веб-сайт. Для этого вам потребуются некоторые дополнительные функции, но вы можете легко переключиться на WebWorkers, когда обнаружите, что он поддерживается в браузере.

+0

ОК, спасибо за ответ; Я буду держаться подальше от веб-работников, пока IE8 не умрет еще. Благодарю. – frenchie

+0

@frenchie Вам не нужно полностью держаться подальше от них, вам просто нужно разумно решать свои проблемы. Создайте один и тот же API для своих классов WebWorker, поскольку вы будете использовать его как рабочий. Делайте вызовы к ним одинаково и т. Д. Таким образом, если вы обнаружите поддержку браузера, вы все равно можете использовать его – Matt

+0

Кроме того, WebWorkers также не поддерживаются в IE9, поэтому, если вы собираетесь ждать, вам придется подождать долго. – Matt

5

Существует проект, обеспечивающий фиктивную реализацию веб-работников для IE < 10: http://code.google.com/p/ie-web-worker/ API такой же, как и для однопоточного исполнения.

Это нормально работает, но я нашел один вопрос относительно этого lib. Код работника выполнен, как только

var worker = new Worker('myworker.js'); 

называется. В настоящий момент не установлено

worker.onmessage = function {...} 

0 0 0 Поэтому может потребоваться запустить ваш рабочий код не до того, как сообщение будет отправлено от основного кода к рабочему, например.

worker.postMessage('start'); 
+0

Если рабочий очень интенсивный процесс, он прекратит выполнение страницы, как сейчас. (например.цикл через массив из 10 000 объектов) – Ray