Вопрос

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

Единственное решение, которое мне удалось придумать на данный момент, - это создать какую-то оболочку для функциональности веб-работника, которая возвращалась бы к какому-то сумасшедшему решению на основе таймера, которое имитировало бы многопоточное выполнение.

Но даже в этом случае, как определить, являются ли веб-воркеры поддерживаемой функцией браузера, в данный момент выполняющего javascript?

Спасибо!

Это было полезно?

Решение

Это извечная проблема веб-разработки:что делать с браузерами, которые не поддерживают то, что вам нужно.В настоящее время я выступаю за использование веб-воркеров только для сложных, длительных задач, которые можно разбить и по какой-то причине нельзя выполнить на стороне сервера.Таким образом, если у вас нет веб-воркеров, вы просто будете ждать дольше.В противном случае вам придется запутать свой код обертками и тому подобным, чего вы постараетесь избежать позже.Моя стратегия деградации происходит, как только страница загружается.

Псевдокод функции загрузки:

if( window.Worker /*check for support*/ )
    someObject.myFunction = function() { /*algorithm that uses Web Workers*/ }
else
    someObject.myFunction = function() { /* sad face */ }

Вам все равно придется написать алгоритм дважды, но вам все равно придется это сделать, если вы хотите поддерживать браузеры без веб-воркеров.Тогда возникает интересный вопрос:стоит ли тратить время (и деньги) на то, чтобы написать что-то дважды, просто чтобы для некоторых людей это могло пройти немного быстрее?

Другие советы

Поразмыслив над этим несколько дней, я написал статью в своем блоге:
http://codecube.net/2009/07/cross-platform-javascript-webworker/

Идея состоит в том, что в тех случаях, когда WebWorker не определен, существует API-оболочка, которая просто использует встроенные методы.Хотя пример в статье очень простой, он работает во всех браузерах :-)

У проекта Беспин есть (как они это называют) фасад это позволяет им запускать код JavaScript в Web Workers, Gears Workers и, если они недоступны в основном потоке.

Вот что сказал Джон Резиг отвечая на комментарий в своем блоге

Я думал об этом, но это будет сложно.Вам придется с самого начала заставить ваш код обработки использовать setTimeout/setInterval (этот код в конечном итоге будет работать как на рабочем, так и на обычном веб-сайте).Таким образом, хотя для браузеров с поддержкой Worker результат будет немного медленнее, по крайней мере, он будет работать в обоих случаях.

У меня была забавная проблема: моя задача без поддержки Web Worker выполнялась слишком медленно в Firefox (не отвечающий скрипт), но достаточно быстро во всех других современных браузерах.С Web Workers это работало во всех браузерах, кроме Opera (10.50), которая вообще не поддерживает Web Workers, но Opera прекрасно работала и без них.

Поэтому я написал WorkerFacade, который использует API Web Worker, если он доступен, или подделывает API с некоторыми незначительными дополнениями к реальному Worker JS.Ты можешь найти WorkerFacade как суть на GitHub.Мне помогло, может поможет и кому-то другому.

Вы можете использовать Modernizr (http://modernizr.com/download/#-webworkers), чтобы определить, поддерживает ли браузер веб-работников, после чего вам необходимо иметь две версии...Вы можете увидеть браузеры с веб-работниками по адресу http://caniuse.com/webworkers

if(Modernizr.webworkers) 
{} 
else
{}

@geowa4

//globals
var useWorer={}
   ,noWorkerClosure=function(){...}
   ,myWorkerClosure=function(){...}
   ;
function init(){
         if(!!window.Worker){
           noWorkerClosure=null;
           useWorer=new myWorkerClosure();
         }
         else{
           useWorer=new noWorkerClosure();
           myWorkerClosure=null;
         }
}

Таким образом, вы освобождаете немного памяти и вам не нужно каждый раз обращаться за поддержкой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top