アプリケーションに、サーバーから一部のコンテンツ (現在サインインしているユーザーのリスト) を 10 秒ごとに更新するページがあります。このデータはmootools フレームワークのAjaxクラスを使用してロードされます。具体的には次のような Javascript を使用します。
var xmldata = (function() {
new Ajax('xmldata.jsp?time='+$time(), {method: 'get', onComplete: dataLoaded, autoCancel: true}).request();
}).periodical(10000);
(10 秒ごとにAjax
オブジェクトを作成し、そのメソッドを呼び出します。このメソッドは、完了するとメソッドrequest()
を呼び出しdataLoaded()
ます)。
ユーザーがブラウザ ウィンドウを開いたままこのページを約 45 ~ 60 分間開いたままにしておくと、別の場所に移動しようとすると、IE (確かに v7、v6 も同様で、Firefox または Chrome にはこの問題はありません) が次のように表示されます。現れる:
このスクリプトの実行を停止しますか?
このページのスクリプトが原因で、Internet Explorer の実行速度が低下しています。実行し続けると、コンピューターが応答しなくなる可能性があります。
さて、これは mootools フレームワークの基礎となるスクリプトのある種のリークが原因である可能性が高いと思われます - あまりにも多くのAjax.request()
呼び出しが呼び出されるためにキューに入れられているか、いくつかのオブジェクトが適切にクリーンアップされていません。いくつかのガベージコレクション機能が含まれているはずです。
IE の Javascript エンジンが裏で行ったことを分析する最善の方法は何ですか? 私の仮説のいずれかが正しいかどうかを判断する方法はありますか?
同様の質問で、誰かが IBM Page Profiler を使用してこの問題をデバッグすることを提案したことがわかりました。Page Profiler を使用してみましたが、あまり成功していません - ページの初期読み込みに問題がある場合 (どのコンポーネントが過度の読み込み遅延を引き起こしているかを分析するため) に役立つようですが、そうではないようですページが完全にロードされた後、ページ内で実行されている Javascript で何が起こっているかを分析できるようにします。ページ プロファイラーで、xmldata.jsp への非同期呼び出しが 10 秒ごとに要求されていることがわかりますが、ページ プロファイラーは、サーバーが (約 600 ミリ秒で) 正常に応答したことだけを示していますが、親ページのスクリプトがこのデータをどのように使用しているかについての洞察はありません。
さらに、閉鎖された mootools ディスカッション リストのこの投稿unload
で、誰かがこの問題を解決するためにガベージ コレクション メソッドを呼び出すリスナーを登録するコードを削除することを提案していますが、それは問題自体ではなく、問題の症状を解決するように思えます。 .