WEB开发网
开发学院网页设计JavaScript 浏览器中的内存泄露(重新整理ing) 阅读

浏览器中的内存泄露(重新整理ing)

 2010-09-14 13:27:58 来源:WEB开发网   
核心提示: 第二个办法,这个来自51js的chpn同学,浏览器中的内存泄露(重新整理ing)(3),让obj=null在return 之后执行!!function bindEvent(){try{var obj=document.createElement("XXX");var v

第二个办法,这个来自51js的chpn同学,让obj=null在return 之后执行!!

function bindEvent()
{
  try{
    var obj=document.createElement("XXX");
    var var0="OOXX";//Here is a variable
    obj.onclick=function(){
      alert(var0);//I want to visit var2 here!
    }
    return obj;//bindEvent must return obj!
  } finally {
    obj=null;
  }
}

2.    某些DOM操作

这是IE系列的特有问题 简单的来说就是在向不在DOM树上的DOM元素appendChild,可能会发生内存泄露(只是可能,具体原因不明,似乎十分复杂,下面例子中去掉onClick也可以避免泄露)。所以appendChild的顺序可能影响内存泄露,来自微软的例子:

</html>
  <head>
    <script language="JScript">
    function LeakMemory()
    {
      var hostElement = document.getElementById("hostElement");
      // Do it a lot, look at Task Manager for memory response
      for(i = 0; i < 5000; i++)
      {
        var parentDiv =
          document.createElement("<div onClick='foo()'>");
        var childDiv =
          document.createElement("<div onClick='foo()'>");
        // This will leak a temporary object
        parentDiv.appendChild(childDiv);
        hostElement.appendChild(parentDiv);
        hostElement.removeChild(parentDiv);
        parentDiv.removeChild(childDiv);
        parentDiv = null;
        childDiv = null;
      }
      hostElement = null;
    }
  
    function CleanMemory()
    {
      var hostElement = document.getElementById("hostElement");
      // Do it a lot, look at Task Manager for memory response
      for(i = 0; i < 5000; i++)
      {
        var parentDiv =
          document.createElement("<div onClick='foo()'>");
        var childDiv =
          document.createElement("<div onClick='foo()'>");
        // Changing the order is important, this won't leak
        hostElement.appendChild(parentDiv);
        parentDiv.appendChild(childDiv);
        hostElement.removeChild(parentDiv);
        parentDiv.removeChild(childDiv);
        parentDiv = null;
        childDiv = null;
      }
      hostElement = null;
    }
    </script>
  </head>
  <body>
    <button onclick="LeakMemory()">Memory Leaking Insert</button>
    <button onclick="CleanMemory()">Clean Insert</button>
    <div id="hostElement"></div>
  </body>
</html>

上一页  1 2 3 4  下一页

Tags:浏览器 内存 泄露

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接