リソースを消費するDOM(ブラウザー)関連のJavaScriptプロセスがあります。開始すると、ページをブロックします(他のDOM関連の処理済み)。このプロセスを非同期で並列実行し、終了したら結果をメインページに渡すことは可能ですか?プロセスはDOMで機能するため、Webワーカーはそうではありません。
これはiframeで実装できますか?JSはiframeブロックでホストされているページのDOMでも開始されましたか?
リソースを消費するDOM(ブラウザー)関連のJavaScriptプロセスがあります。開始すると、ページをブロックします(他のDOM関連の処理済み)。このプロセスを非同期で並列実行し、終了したら結果をメインページに渡すことは可能ですか?プロセスはDOMで機能するため、Webワーカーはそうではありません。
これはiframeで実装できますか?JSはiframeブロックでホストされているページのDOMでも開始されましたか?
実際には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 ミリ秒以上ブロックされないようになります。したがって、ブラウザは応答性を維持します。