Web Worker で正常に機能を低下させる
-
19-09-2019 - |
質問
それで、私はますます次のことを聞くようになりました ウェブワーカー. 。これは本当に素晴らしいことだと思いますが、これまでのところ誰も真剣に取り組んでいるのを見たことがありません。それは、新しいテクノロジーをまだサポートしていない古いブラウザをどのようにサポートするかということです。
これまでのところ私が思いつくことができた唯一の解決策は、Web ワーカー機能を囲むある種のラッパーを作成し、マルチスレッドの実行をシミュレートするクレイジーなタイマーベースのソリューションにフォールバックすることです。
しかし、その場合でも、Web ワーカーが現在 JavaScript を実行しているブラウザでサポートされている機能であるかどうかをどのように検出するのでしょうか?
ありがとう!
解決
これは、Web開発の古くからの問題があります。現在、私は分割することができ、複雑な、長時間実行されるタスクのためのWeb労働者を使用して提唱し、何らかの理由で、サーバー側で行うことはできません。あなたがウェブ労働者を持っていない場合は、この方法では、あなたは、単に長く待ちます。そうしないと、あなたは後で回避しようよラッパーとその他もろもろであなたのコードの混乱を作成する必要があります。マイ劣化戦略は、すぐにページがロードされると起こります。
のonload関数の擬似コード:
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があるということです。記事のサンプルは非常に単純ですが、それはすべてのブラウザで動作します: - )
ベスピンプロジェクトは、<のhref = "http://www.nonblocking.io/2009/07/google-chromes-very-incomplete-web.html" のrel = "nofollowをnoreferrer"(彼らが呼ぶもの)があります、それらがWebワーカーにJavaScriptコードを実行することができます歯車労働者とそれらがメインスレッドで利用されていない場合>ファサードでます。
ここでは、ジョンResig氏は、彼のブログにコメントに返信言ったの
私はこのことについて考えた - しかし、それは難しいことでしょう。あなたは(このコードは、労働者の両方に、通常のウェブサイトに取り組んで終わるでしょう)最初からあなたの処理コード使用のsetTimeout /のsetIntervalを行う必要があります。少なくとも、それは両方のケースでうまくいく結果は労働者対応のブラウザでは若干遅くなりながらそう。
私は、Webワーカーをサポートしていない私の仕事は、Firefox(応答のないスクリプト)で遅すぎた面白い問題を抱えていたが、他のすべての近代的なブラウザでは十分速いです。 ウェブ労働者と、それは全くのWebワーカーをサポートしていませんオペラ(10.50)を除き、すべてのブラウザで働いていたが、Operaはそれらなしでうまく働いています。
だから私は、使用可能なWebワーカーAPIを使用するか、実際の労働者JSにいくつかのマイナーな追加でAPIを偽装WorkerFacadeを書きました。あなたはGitHubのの上の要点として WorkerFacadeを見つけることができます。あまりにも、他の誰かを助けるかもしれない、私のためによく働いています。
Modernizr (http://modernizr.com/download/#-webworkers)ブラウザがウェブワーカーをサポートしているかどうかを検出するには、その時点で 2 つのバージョンが必要になります...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;
}
}
この方法は、あなたは、いくつかのメモリのonloadを解放し、あなたはサポートのために、それぞれの時間を依頼する必要はありません。