2012-05-23 16 views
6

私は150行のリストを持っており、各行には3つのスキンの選択項目があります。応答しないスクリプト - 回避することは可能でしょうか?

各結果を表示する前に処理する必要があるため、「このページのスクリプトはビジー状態であるか、応答が停止している可能性があります。スクリプトを今すぐ停止するか、スクリプトが完了するとします。 jquery.jsファイルを参照します。

いくつかのjQueryを実行するとこのエラーを回避できますか?

ありがとうございます。

+1

スニペットを表示せずに本当にわからない:S –

+0

http://stackoverflow.com/questions/1917380/how-to-avoid-the-unresponsive-script-popup-in-firefox-with-long -running-javascri – Dev

答えて

6

処理を複数の部分に分割し、ブラウザにある程度の時間を与える必要があります。他に0または1ミリ秒のsetTimeoutを使用します。

A非常に簡単な方法は、asyncライブラリのforEachSeries方法を使用することになります

async.forEachSeries(yourData, function(item, cb) { 
    // process item 
    async.nextTick(cb); 
}); 

yourDataはあなたの行を含むjQueryオブジェクト可能性があり、その後、itemは、1行のDOM要素になります。

+0

は '0または1ミリ秒setTimeout'で十分ですか? – undefined

+0

はい、待機中のタスクはスクリプトが停止した時点で実行されるためです。 JavaScriptはシングルスレッドなので、新たに起動したコードが終了する前に実行が実際に開始されません。したがって、期間は実際には関係ありません – koenpeters

+0

このタイムアウトをJSに追加する必要があります.PHPではありません。 – Psyche

0

(jQueryで利用可能なラッパーがある場合)jQueryについてはわかりませんが、バニラJSにはWebWorkersという概念があります(IE以外はサポートがかなり良い - here参照)。

ここでは、あなたの計算に追加のスレッドを開始します。これはUIスレッドをブロックしません。計算が完了し、結果の表示だけが残っていると、ワーカーからUIスレッドにデータが送信され、結果が表示されます。

詳細については、MDN tutorialをご覧ください。

0

ダウンロードする代わりに、必要に応じてJavaScriptをダウンロードしてください。 すべてがページの読み込み中です。

On Demand JavaScript

0

第一人者スティーブ・ソーダーズはこの問題とどのように彼の著書「さらに高速のWebサイト」でそれを解決するために書いたウェブサイトのパフォーマンス。彼はタイムアウトを使って他のプロセスにも時間を与えるソリューションについて説明しています。

Here'sこの問題を扱う本の一部です。

関連する問題