[IE6] Windows 2003 Server IE6のFunctionプロトタイプでリーク

H氏からのメモ。
許可を得て転載。

9/3 M氏の指摘により一部IEでJSエラーになるのを修正。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8;">
<title>Leak Test</title>
<script>
var count = 0;
function $(id) {
  return document.getElementById(id);
}
Function.prototype.later = function(ms, s) {
  var sf = this,
  f = function() {
    var a = f.arguments,
    lf = function() { sf.apply(s,a); };
    setTimeout(lf,ms);
  };
  return f;
};
Function.prototype.bind = function(s) {
  var m = this;
  return function() { return m.apply(s,arguments);};
};

function disp() {
  $("count").innerHTML = ++count;
  $("result").innerHTML += "* ";
  
  window.disp.later(1000, window)();  // 対策前
  //setTimeout(window.disp.bind(window), 1000);  // 対策後
}
</script>
</head>
<body>
<p>
<input type="button" id="btnSame" value="test" onclick="window.disp.later(1000, window)();"><br/>
</p>
<div id="count"></div>
<div id="result" style="width:500px;"></div>
</body>
</html>


Windows2003ServerのFunctionオブジェクトのプロトタイプ内でsetTimeoutすると4KBリークする。
繰り返すと、繰り返すだけ、リークする。

XPのIE6 SP3では発生しない。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック