Frage

Also fange ich immer mehr zu hören über Web Worker . Ich denke, es ist absolut fantastisch, aber die Frage, die ich nicht, dass jemand wirklich bisher gesehen habe, bewältigen ist, wie älteren Browser zu unterstützen, die noch keine Unterstützung für die neue Technologie.

Die einzige Lösung, die ich im Stande gewesen bin mit so weit zu kommen ist eine Art Wrapper um die Web-Worker-Funktionen zu machen, die zurück zu einige verrückten Timer-basierte Lösung fallen würden, die Multi-Threaded-Ausführung simulieren würde.

Aber auch in diesem Fall, wie man sich, ob Web-Arbeiter erkennt eine unterstützte Funktion des Browsers zur Zeit die kein JavaScript ausführen?

Danke!

War es hilfreich?

Lösung

Dies ist das uralte Problem der Web-Entwicklung: was Browser zu tun, das nicht unterstützen, was Sie brauchen. Derzeit Ich plädiere dafür, nur Web Worker für komplexe, lang laufende Aufgaben verwenden, die aufgebrochen werden kann, und aus irgendeinem Grund kann nicht serverseitige erfolgen. Auf diese Weise, wenn Sie nicht über Web Worker haben, warten Sie einfach länger. Andernfalls würden Sie ein Durcheinander von Code mit Wrapper und so weiter machen müssen, dass Sie versuchen Sie es später zu vermeiden. Meine Abbaustrategie geschieht, sobald die Seite geladen wird.

onload Funktion Pseudo-Code:

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

Sie haben noch den Algorithmus zweimal zu schreiben, aber man würde das sowieso tun müssen, wenn Sie Browser ohne Web Worker unterstützen wollen. So dass eine interessante Frage bringt: ist es die Zeit (und Geld) wert etwas zweimal zu schreiben, nur damit es ein wenig schneller für einige Leute geht

Andere Tipps

Nach ein paar Tagen auf das Kauen, landete ich schreibe einen Artikel auf meinem Blog:
http://codecube.net/2009/07/cross-platform-javascript -webworker /

Die Idee ist, dass in Fällen, in denen WebWorker nicht definiert ist, gibt es einen Wrapper-API, die Einbau-Techniken nur verwendet. Obwohl die Probe in dem Artikel sehr einfach ist, es in allen Browsern funktioniert: -)

Das Bespin Projekt hat (wie sie es nennen) eine Fassade , die sie ausführen JavaScript-Code in Web Workers, Gears Arbeiter und wenn diese nicht verfügbar sind im Hauptthread.

Hier ist, was John Resig sagte auf seinem Blog auf einen Kommentar antworten

  

Ich dachte darüber nach - aber es wird schwierig sein. Sie würden Ihre Verarbeitungscode Verwendung SetTimeout / setInterval von Anfang machen müssen (dieser Code würde sowohl ein Arbeiter und auf einer normalen Website am Ende arbeiten). Während also das Ergebnis wäre für Arbeiter-fähigen Browser zumindest etwas langsamer es in beiden Fällen funktionieren würde.

hatte ich das komisch Problem, dass meine Aufgabe ohne Unterstützung Web Worker war zu langsam in Firefox (Skript reagiert nicht), aber schnell genug, um in allen anderen modernen Browsern. Mit Web Workers arbeitete sie in allen Browsern außer Opera (10.50), die nicht Web Worker überhaupt nicht unterstützt, aber Opera gearbeitet, ohne sie in Ordnung.

Also schrieb ich einen WorkerFacade, die die Web-Worker-API verwendet, wenn verfügbar oder fälschen die API mit einigen geringfügigen Ergänzungen des eigentlichen Arbeiter JS. Sie können WorkerFacade als Kern auf GitHub finden. Funktionierte gut für mich, vielleicht jemand anderes helfen, auch.

Sie können mit Modernizr ( http://modernizr.com/download/#-webworkers ) zu erfassen, wenn der Browser Webworker unterstützt, an welcher Stelle Sie dann zwei Versionen haben müssen ... Sie können die Browser mit Webworker unter 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;
         }
}

Auf diese Weise können einige Speicher onload frei, und Sie müssen nicht jedes Mal um Unterstützung zu bitten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top