2008-06-15 (日)
■ XMLHttpRequest オブジェクトを最後に null にしてメモリリークを避ける
PukiWiki の ajaxtree プラグイン で用いている JavaScript のコードをチェックしていたところ、 Ajax の部分のコードが、Internet Explorer でメモリリークを起こしていました。 抜粋すると、こんなコードです。
toggle: function(event) {
var element = event ? event.target : window.event.srcElement;
if (element.nodeName == "LI") {
var li = element;
......
var req = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
if (req) {
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {
li.className = "expanded";
li.innerHTML += req.responseText;
}
};
req.open("GET", url, true);
req.setRequestHeader("If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT");
req.send("");
}
}
},
こういう Ajax のコードって結構あると思うんですが、 言われてみれば確かに、メモリリークを起こすパターンに該当しています。 とりあえず jQuery のコードを参考に、以下のように修正してみました。
--- ajaxtree.js.orig
+++ ajaxtree.js
@@ -38,6 +38,7 @@
if (req.readyState == 4 && req.status == 200) {
li.className = "expanded";
li.innerHTML += req.responseText;
+ req = null;
}
};
req.open("GET", url, true);
IE6 だとこれでメモリリークしなくなりましたが、IE7 はまだメモリリークしてます。 うーん、もう少し真面目に対策しないとだめか?
このエントリの続き: 2008-06-20 (金), 2008-07-28 (月)
[コメントを書く]
本日のリンク元
- 6 google検索(XMLHttpRequest new リーク)
- 5 google検索(jQueryオブジェクト Ajax タグ)
- 3 google検索(jqueryオブジェクト ajax httprequest)
- 3 google検索(javascript xmlhttprequestオブジェクト)
- 2 google検索(javascript オブジェクト メモリリーク)
- 2 google検索(javascript メモリ)
- 2 google検索(ajax リーク null google)
- 2 google検索(ActiveXObject open リーク)
- 2 google検索(ajax IE メモリリーク)
- 2 http://www.google.co.jp/hws/search?client=dell-row...
- 1 google検索(ActiveXObject メモリーリーク)
- 1 google検索(t)
- 1 google検索(IE7 メモリ)
- 1 google検索(ajax innerHTML リーク)
- 1 google検索(XMLHttpRequest メモリーリーク)
- 1 google検索(onreadystatechange IE memory leak)
- 1 google検索(IE7 メモリリーク)
- 1 google検索(javascript メモリリーク null)
- 1 google検索(IE7 メモリリーク ajax)
- 1 google検索(XMLHttpRequest responseText null)
- 1 google検索(IE7 メモリリーク)
- 1 google検索(XMLHttpRequest PHP)
- 1 google検索(xmlhttprequest メモリ)
- 1 google検索(javascript responseText req.send(null);)
- 1 google検索(xmlhttprequest リーク)
- 1 google検索(jquery メモリ)
- 1 google検索(ie6 メモリーリーク)
- 1 google検索(onreadystatechange メモリ)
- 1 google検索(t)
- 1 google検索(t)
- 1 google検索(t)
- 1 google検索(IE7 jquery リーク)
- 1 google検索(xmlHttp メモリリーク)
- 1 google検索(xmlHttp メモリリーク)
- 1 google検索(ruby メモリーリーク split)
- 1 google検索(jquery ie6 メモリーリーク)
- 1 google検索(jquery ie メモリリーク)
- 1 google検索(javascript xmlrequest innerhtml)
- 1 google検索(javascript send If-Modified-Since IE7)
- 1 google検索(javascript event 最後)
- 1 google検索(javascript XMLHttpRequest status)
- 1 google検索(javascript XMLHttpRequest status)
- 1 google検索(javascript XMLHttpRequest)
- 1 google検索(javascript リーク innerHTML )
- 1 google検索(javascript メモリリーク ie6)
- 1 google検索(ie7 xmlhttprequest responseText)
- 1 google検索(centos php HttpRequest)
- 1 google検索(XMLHttpRequest jquery)
- 1 google検索(XMLHttpRequest メモリリーク)
- 1 google検索(XMLHTTP メモリ)
- 1 google検索(XMLHTTP オブジェクト javascript)
- 1 google検索(IE6 open メモリリーク)
- 1 google検索(IE6 JavaScript メモリリーク)
- 1 google検索(IE メモリリーク open)
- 1 google検索(IE メモリリーク 対策)
- 1 google検索(HTTP_Request メモリ)
- 1 google検索(ActiveXObject メモリ)
- 1 google検索(メモリリーク IE6)
- 1 google検索(javascript XMLHttpRequest open)
- 1 google検索(javascript XMLHttpRequest)
- 1 google検索(XMLHttpRequest null)
- 1 google検索(javascript メモリーリーク null)
- 1 google検索(javascript XMLHttpRequest onreadystatechange)
- 1 google検索(javascript メモリリーク ie)
- 1 google検索(IE7 javascript メモリリーク)
- 1 google検索(javascript メモリ)
- 1 google検索(ajax メモリリーク IE)
- 1 google検索(xmlhttprequest メモリリーク)
- 1 google検索(xmlhttp get google app engine)
- 1 google検索(onreadystatechange リーク)
- 1 google検索(onreadystatechange メモリリーク)
- 1 google検索(jquery treeview expand)
- 1 google検索(javascript xmlhttprequest)
- 1 google検索(javascript XMLHttpRequest responseText)
- 1 google検索(javascript XMLHttpRequest オブジェクト)
- 1 google検索(javascript メモリ IE7)
- 1 google検索(javascript メモリリーク 対策)
- 1 google検索(innerhtml IE メモリ)
- 1 google検索(innerhtml メモリリーク)
- 1 google検索(innerHTML null IE7)
- 1 google検索(ie6 google api メモリー)
- 1 google検索(ie メモリリーク 対策)
- 1 google検索(ajax メモリリーク onreadystatechange)
- 1 google検索(XmlHttp メモリ)
- 1 google検索(XMLHttpRequest new readyState メモリ リーク)
- 1 google検索(PHP メモリ オブジェクト)
- 1 google検索(IE7 メモリーリーク)
- 1 google検索(IE6 event メモリーリーク)
- 1 google検索(IE6 メモリーリーク)
- 1 google検索(IE メモリ JavaScript)
- 1 google検索(Element XMLHTTPRequest)
- 1 google検索(ActiveXObject メモリーリーク)
- 1 google検索(ActiveXObject リーク)
- 1 google検索(.status javascript XMLHttpRequest)
- 1 google検索(IE6 メモリリーク)
- 1 google検索(javascript XMLHttpRequest open)
- 1 google検索(null JavaScript)
- 1 google検索(JavaScript メモリリーク)
- 1 google検索(javascript XMLHttpRequest send)
- 1 google検索(javascript メモリーリーク)
