Chrome拡張機能をコーディングしています。バックグラウンド(setInterval)のタイマーで実行される$ .post()コマンドがあります。コールバックは解析関数を呼び出します。
function parseData(new_data) {
new_data = $.parseJSON( new_data );
for(var x=0; x<new_data.length; x++) {
var obj = new CustomObj( new_data[x] );
// I commented out code here in order to help isolate the problem.
}
}
CustomObjは、典型的なJSの方法でプロトタイプ化されています...
function CustomObj(data){
this.data = data;
}
CustomObj.prototype.getName = function() {
return this.data.name;
}
// Of course, there are a few more methods here...
問題:拡張により、大きな遅延が発生します。$ .post()を10秒ごとに実行するように設定した場合(単に問題の発生をスピードアップするため)、5分以内にChromeのタブを更新すると、約30秒間「[MyExtension]で待機中」と表示されます。最終的に、ブラウザは多かれ少なかれロックアップします。
私が発見したこと:for()ループの内部をコメントアウトすると、すべてが桃色になります。ラグはありません。上記の行をfor();に入れるだけです。ループ(CustomObjを作成)すると、問題が再発します。
私の知る限り、ガベージコレクションの問題のようです。obj変数を暗黙的に定義し、明示的に削除しようとしました(ただし、JavaScriptでオブジェクトを削除すると、削除が不十分であると思われます)。何も機能していないようです。
ありがとう。