2

リソースを消費するDOM(ブラウザー)関連のJavaScriptプロセスがあります。開始すると、ページをブロックします(他のDOM関連の処理済み)。このプロセスを非同期で並列実行し、終了したら結果をメインページに渡すことは可能ですか?プロセスはDOMで機能するため、Webワーカーはそうではありません。

これはiframeで実装できますか?JSはiframeブロックでホストされているページのDOMでも開始されましたか?

4

1 に答える 1

4

実際にはWebWorkersを使用するための主要な例になりますが、正しく述べたように、DOM への参照はありません。唯一のオプションは、そのプロセスをより小さなタスクに分離することです。それができるなら、2 つの質問を自問する必要があります。

  • 小さなタスクは順番に実行する必要がありますか?
  • これらのタスクは非同期で実行できますか?

両方の質問にNoで答えることができる場合は、ランナウェイ スクリプト タイマーをセットアップして、これらのタスクを非同期的に実行できます。例:

var taskList = [
    function() {},
    function() {},
    function() {},
    function() {}
    // a whole lot more entrys
];  // in a real-world scenario you would `.push()` values or functions

(function _loop() {
    setTimeout(function() {
        var start = Date.now();
        do {
            taskList.shift()();
        } while( taskList.length && Date.now() - start < 100)

        if( taskList.length ) setTimeout( _loop, 100 );
    },100);
}());

上記のアルゴリズムは、に含まれる関数taskListをできるだけ速く実行しますが、最大 100 ミリ秒の時間枠内で実行します。これにより、処理中にブラウザーとUI スレッドが100 ミリ秒以上ブロックされないようになります。したがって、ブラウザは応答性を維持します。

于 2012-10-27T21:40:24.700 に答える