2011-01-14 17 views
5

私はPrototypeを使用して作成されたサイトで作業していますが、これをjQueryに段階的に移しています。 PrototypeのAjax.Updaterを使って多くのページを更新しています。しかし、Prototypeが削除し置換する要素にjQueryウィジェットが実行されていることがあるので、$ .cacheはウィジェットによって作成された追加要素への参照を持ちます。 jQueryはDOMの削除を行っていないため、削除されたときに$ .cacheからデータを消去する機会はなく、メモリリークが発生します。 jQueryに$ .cacheをチェックし、もはやDOMにない要素のデータを破棄するように指示する方法はありますか?要素でjQuery .data()を使用して、直接DOM操作のリークメモリで要素を削除しますか?

答えて

3

少しトリッキーなサウンド - のAjax.Updaterがは、他の中で、あなたはおそらくキャッシュの定期的なチェックを行う必要がありますことを意味し、onCompleteの/ ONSUCCESSコールバックを持っていませんAjax.Requestの専門であるため、特にもの。 jQueryの「アップデータ」を作成するよりも多くの作業が可能です。

アップデーターをjQueryリライトに置き換える場合は、この問題は完全にになります。確かに、これを回避するよりも簡単です。 jQueryのシンプルな「アップデータ」が続きます。 jQueryのが存在する場合

function update() { 
    $.ajax({ 
     type: 'get', 
     url: 'theContent.html', 
     success: function(text) { 
      // .html calls '.cleanData()' internally. No need to do anything else. 
      $('#updateMe').html(text); 
     } 
    }); 
} 

var i = setInterval(update, 5000); 
+0

我々はすでに、そもそもプロトタイプのカスタマイズバージョンを実行しているので、私はちょうどこれにより、データのクリーンアップを保証する、要素を削除するためにjQueryのを使用するプロトタイプObject.removeとObject.update機能を更新しました。プロトタイプのAjax.Updaterは、コード全体であまりにも多くの場所で使用されているため、jQueryアップデータを書くのは妥当ではありませんでした。 –

関連する問題