<div src="..."></div>
ドキュメント本文でを検索し、指定された src からコンテンツを取得し (XHR を使用)、そのコンテンツを div に挿入する小さな lib/script に取り組んでいます。先に進む前に、コーディングの成果を挙げさせてください。
function Include(ele) {
this.ele = ele;
this.xhr = new XHR();
this.xhr.onload = (function(incObj){
return function(){
incObj.onload.call(incObj,this);
}
})(this);
this.xhr.open("GET",ele.getAttribute("src"),false);
this.xhr.send();
}
Include.prototype.XHR = function(){/* code to find a viable xhr object*/}
Include.prototype.onload = function(){/* stuff */}
var inc = new Include(document.getElementById("someId"));
各 XHR 要求が行われ、コンテンツが処理された後、クロージャーにより、xhr オブジェクトは破棄されないため、作成された Include オブジェクトは破棄されません。これは、メモリリークです。a: インクルード リクエストが少ない、b: そのようなリクエストからのコンテンツが少ない、どちらの場合もそれほど大きな問題ではありませんが、インクルードが増加し、応答コンテンツが増加するにつれて、メモリ使用量が着実に増加することがわかります。このリークを修正するには、クロージャーを壊す (または、グローバル変数、obj などの使用に依存しない実行可能な回避策を使用する) にはどうすればよいですか?
(私が取り組んでいるのはブラウザjs用ですが、ライブラリの使用を提案しないでください。私の質問は、javascript自体がどのように機能するかにもっと当てはまります)