2012-01-26 22 views
2

私はこれでかなり確信していますが、あなたの意見があります:Webワーカーを使用しないJavascriptバックグラウンド処理?

Webワーカーが利用できない場合、Javascriptを使用してバックグラウンドで操作を実行することはどうしてですか? 非同期のsetTimeout()機能やその他のメカニズムを「誤用する」方法はありますか? 私の目標は、localStorageから物を読んで、いくつかの変換を行い、Ajax経由で送信することです。

ありがとうございました。

答えて

1

ウェブワーカーを使用しないで、あなたが提案したもの(setTimeoutを使用)がこれを行う唯一の方法です。もちろん、その時点では本当に「バックグラウンド」ではありません。 「バックグラウンド」コードを実行するたびに処理を非常に短くする必要があることに注意してください。なぜなら、実際にはバックグラウンドコードではないからです。コードが実行されている間は、ページはかなり反応しません(応答がない度合いはブラウザによって異なりますが、ページ上のJavaScriptコードは関数呼び出しが終了するまで待たなければなりません)。

2

JavaScriptは実際にはマルチスレッドではありませんが、setTimeout(code, 0)を使用するとコードを非同期で実行できます。これにより、実行する関数がキューに入れられます。

+0

オーケーとして実行されますが、通常の操作に応答になりますが、そのコードは、将来のjQueryのポイントで実行されている場合、これは手段としてそれにもかかわらず、その時点でUIベースのUIはブロックされますか? – ceran

1

いいえ、Javascriptのバックグラウンドで何もできません。厳密にはシングルスレッドです。

setTimeoutまたはsetIntervalを使用すると、フォアグラウンドで作業することができますが、毎回その作業の一部を行うことができます。そうすれば、あなたの仕事のバースト間のイベントを処理するので、インターフェースはまだまだ合理的です。

3

バックグラウンドで操作を実行することはできませんが、小さなチャンクで分割し、次の各部分をsetTimeoutで実行できます。結果ブラウザは変更をレンダリングする時間を持つことになりますし、あなたの長いプロセスがよく

function iteration(){ 
    do_some_small_amount_of_work(); 
    if (!not_finished) 
     scheduler.setTimeout(iteration, 1); 
} 
+0

あなたにも3人のおかげで。 – ceran

関連する問題