私はこれでかなり確信していますが、あなたの意見があります:Webワーカーを使用しないJavascriptバックグラウンド処理?
Webワーカーが利用できない場合、Javascriptを使用してバックグラウンドで操作を実行することはどうしてですか? 非同期のsetTimeout()
機能やその他のメカニズムを「誤用する」方法はありますか? 私の目標は、localStorage
から物を読んで、いくつかの変換を行い、Ajax経由で送信することです。
ありがとうございました。
私はこれでかなり確信していますが、あなたの意見があります:Webワーカーを使用しないJavascriptバックグラウンド処理?
Webワーカーが利用できない場合、Javascriptを使用してバックグラウンドで操作を実行することはどうしてですか? 非同期のsetTimeout()
機能やその他のメカニズムを「誤用する」方法はありますか? 私の目標は、localStorage
から物を読んで、いくつかの変換を行い、Ajax経由で送信することです。
ありがとうございました。
ウェブワーカーを使用しないで、あなたが提案したもの(setTimeout
を使用)がこれを行う唯一の方法です。もちろん、その時点では本当に「バックグラウンド」ではありません。 「バックグラウンド」コードを実行するたびに処理を非常に短くする必要があることに注意してください。なぜなら、実際にはバックグラウンドコードではないからです。コードが実行されている間は、ページはかなり反応しません(応答がない度合いはブラウザによって異なりますが、ページ上のJavaScriptコードは関数呼び出しが終了するまで待たなければなりません)。
JavaScriptは実際にはマルチスレッドではありませんが、setTimeout(code, 0)
を使用するとコードを非同期で実行できます。これにより、実行する関数がキューに入れられます。
いいえ、Javascriptのバックグラウンドで何もできません。厳密にはシングルスレッドです。
setTimeout
またはsetInterval
を使用すると、フォアグラウンドで作業することができますが、毎回その作業の一部を行うことができます。そうすれば、あなたの仕事のバースト間のイベントを処理するので、インターフェースはまだまだ合理的です。
バックグラウンドで操作を実行することはできませんが、小さなチャンクで分割し、次の各部分をsetTimeoutで実行できます。結果ブラウザは変更をレンダリングする時間を持つことになりますし、あなたの長いプロセスがよく
function iteration(){
do_some_small_amount_of_work();
if (!not_finished)
scheduler.setTimeout(iteration, 1);
}
あなたにも3人のおかげで。 – ceran
オーケーとして実行されますが、通常の操作に応答になりますが、そのコードは、将来のjQueryのポイントで実行されている場合、これは手段としてそれにもかかわらず、その時点でUIベースのUIはブロックされますか? – ceran