2010-12-03 14 views
0

HTML5ワーカーは、ロックされたユーザーインターフェイスを避けるための非常に興味深い概念です。jQueryイベントをバインドするHTML5 Webワーカー(IEについてはどうですか)

ショップアプリケーションでは、jQueryバインディングを使用して、機能を有効にする必要があるより多くの製品ウィジェットをリストしています。

この作業を実行するWebワーカーを使用して、ページの応答が早くなるようにすることはできますか。

WebワーカーのサポートはIEでは不足していますが、サポートが到着するまで何かsimularを実装/シミュレートすることは可能でしょうか?

私はIEと古いブラウザhttp://code.google.com/p/ie-web-worker/

答えて

1

はい、ウェブ労働者はので、それらをレンダリングスピードアップ使用して、DOMをロックしていないため、この実装を見つけました。

Webワーカーの唯一の代替方法は、window.setTimeoutで呼び出される一連の短い関数を使用することですが、これによりDOMがロックされます。

編集: あなたが見つけた代替手段は全く同じではありません。プリエンプティブマルチタスキングを実行しないため(実行方法は)、長時間実行されているスクリプトを実行すると、ブラウザはページがクラッシュしたと見なしますが、クローム、ファイアフォックスなどはクロムにはなりません。

基本的に、 DOMにアクセスする必要があります。タスクをかなり大きな部分(最大で50ミリ秒)に分割し、各部分をwindow.setTimeoutに入れて、ブラウザがそれらをスケジュールするようにします。部品が小さすぎると、ブラウザが時間を浪費します。

+0

:「注:いつものように、背景-含むスレッドDOMを操作していない労働者は、可能なアクションは、バックグラウンドで撮影した場合。スレッドがDOMを変更する必要がある場合、その作業を行うためにメッセージを作成者にポストする必要があります。 " $( '#id')ですので、クリックしてください(functin(){}); DOMには影響しませんか? – Michael

+0

私はあなたがDOMを操作したいとは思わなかった。あなたはメッセージの処理や投稿以外のWebワーカーでは何もできません。 DOMアクセスはシングルスレッドでなければならないため、DOMを操作できるWebワーカーを作成することは必要ありません。 –

+0

しかし、クリックイベントバインディングをDOM操作に追加するのでしょうか? – Michael

0

長時間実行しているスクリプトを実行している場合は、Webワーカーが役に立ちます。長時間実行されているスクリプトを「ワーカー」プロセスにオフロードすると、ワーカーがUIをブロックしないため、UIが応答しやすくなります。残念ながら、私はIEのWebワーカーにとって大きなシム/ポリフィルを認識していません(IEユーザーにはGoogle Gearsがインストールされていない限り)。私は、あなたのアプリケーションを反応させる最良の方法は、それをサポートしているブラウザでWebワーカーを使用することですが、そうでないブラウザではsetTimeout(約100ms)を使用することになります。

は、Google Gearsをベースシムに興味があるなら、ここにある:MDNからhttp://html5-shims.googlecode.com/svn/trunk/demo/workers.html

+0

はい、誰もがChrome Frame、FTWをインストールしていれば簡単でしょう。それまではsetTimeoutソリューションがIEのための手段だと思います。私が上に掲げたリンクは1msのタイムアウトを使用していますが、少し低いようですね。 – Michael

+0

タイムアウトがどれくらい長くあるかは問題ありません。それが待っている最小です、あなたにコントロールを返す前に別の仕事をすることを決定するかもしれません。 –

+0

しかし、私はコードを実行するいくつかのオーバーヘッドがあると思います。したがって、大きな値(setTimeoutの場合)と小さな値(setTimeoutの場合)の関数呼び出しのオーバーヘッドとの間で肩を並べる必要があります - これはちょうど理論的なものです(大きな価値の部分は実用的です) – Michael

関連する問題