更改位置哈希,onhashchange和内存泄漏

时间:2011-08-17 15:13:10

标签: javascript html5

在Safari和Firefox 5(未经测试的其他浏览器)中运行以下脚本时,两种浏览器的内存使用量急剧增加。但是在功能完成后,内存使用量仍然非常高。 Safaris内存使用量增长约80MB,FF最高可达200​​MB。

任何想法为什么,即使在几分钟后,内存使用量也不会减少?

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <script type="text/javascript">
      window.onhashchange = function() {
        var i = 1; // do something
      };

      function leakIt() {
        for(var i = 0; i < 10000; i++) {
          window.location.hash = i%4; // Trigger onhashchange
        }
      };

      window.onload = function() {
        document.getElementById('leak').addEventListener('click', leakIt,false);
      };
    </script>
  </head>
  <body>
    <button id="leak">Leak it!</button>
  </body>
</html>

其他信息

如果我在Safari中重新加载页面并再次调用leakIt函数,则内存增加约20MB,在leakIt终止后,内存使用量将恢复到第一次调用{之后的数量{1}}。

1 个答案:

答案 0 :(得分:1)

刷新页面时会发生什么?当你继续刷新页面并且内存不断增加时,那就是内存泄漏。你可以使用Sieve来检测它。