3

アプリケーションの一部として実行したい計算量の多い Javascript コードがあります。UI スレッドとリソースを共有していることを理解しているので、UI をチャンクに分割し、Angular の $timeout を使用して一度に小さなチャンクを実行することで、UI を非常に応答性の高いものにしました。これは問題なく動作しますが、Internet Explorer 8 では常に「このスクリプトの実行を停止しますか?」というプロンプトが表示されます。

「スクリプトが多すぎる」という IE8 のしきい値を理解して回避するにはどうすればよいですか? アプリケーションが応答し、他のブラウザーで問題が発生しないようにするために、十分な頻度でメイン スレッドに制御を戻しています。無限ループの状況などはありません。

4

2 に答える 2

3

IE8 の「スロー スクリプト」の概念は、他のブラウザのように設定された時間ではなく、実行する操作の数に基づいています。KB175500から:

Internet Explorer 4.0 以降、タイムアウトは Windows メッセージに基づく固定値ではなくなりました。Internet Explorer は、実行されたスクリプト ステートメントの総数を追跡し、新しいスクリプトの実行が開始されるたびに値をリセットするようになりました...

そのため、迅速に実行するスクリプト ステートメントを多数実行する場合でも、多少短い時間で制限に達する可能性があります。

これをデバッグして回避するには、問題が解決するまで、各反復 (あなたの場合は各呼び出し) で行う作業の量を減らすこと$timeoutです (悲しいことに、IE8はWeb ワーカーをサポートしていないため)。

于 2013-08-21T20:08:34.810 に答える
-1

試したことはありませんが、タイムアウトを使用する代わりに、イベントを投稿し、それをキャッチして次のチャンクを処理することをお勧めします... IE をだますことができることを願っています。お知らせください。

于 2013-08-21T20:05:24.377 に答える