问题描述:
有个监控网页需要一直打开,因为是监控所以数据经常变化,js中的表格来回变化导致内存一点儿点儿增加,从几十兆涨到几百兆(只是一晚上)。无法忍受啊。请问各位有遇到过相同问题的吗。谢谢各位啦!!!

解决方案 »

  1.   

    代码如下:
      3 var flag = 0;
      4
      5 $(document).ready(init);
      6
      7 //init the information about SAN source,SAN userinfo,SAN session and SAN service status
      8 function init()
      9 {
     10
     11     $('#status_system').show();
     12     memoryTest();
     13 }
     14
     15 function memoryTest()
     16 {
     17     var tbody = $('#diagnose_table').children("tbody");
     18     tbody.empty();
     19     var tr = "";
     20     if(flag == 0)
     21     {
     22         var i = 0;
     23
     24         for(; i < 100; i++)
     25         {
     26             tr = "<tr><td>aaaa</td><td>bbbb</td><td>cccccc</td><td>eeeeeee</td></tr>";
     27             tbody.append(tr);
     28         }
     29         flag = 1;
     30     }
     31     else
     32     {
     33         var tr = "<tr><td>cccc</td><td>eeeeee</td></tr>";
     34         tbody.append(tr);
     35         flag = 0;
     36     }
     37     setTimeout("memoryTest()", 1000);
     38 }
      

  2.   

    内存泄露问题
    http://edu.codepub.com/2010/0426/22293.php
    看看这篇先。
      

  3.   

    谢谢各位的回复,上边贴的代码是用jquery来做的,但是jquery掌握的实在是不好(也不知道还是因为jquery对内存处理的不好),所以摒弃了jquer。采用了DOM+javascript。解决了这个问题。但出现了新问题,问题代码在最后一行。错误提示:
    Node cannot be inserted at the specified point in the hierarchy" code: "3
    [Break on this error] tbody.appendChild(tr); 
    哪位可以解决下啊,谢谢啦!!!
    代码如下:
     var tbody = document.getElementById("table_board_detail").lastChild; //table中有thead、tbody
     var ttrr = tbody.firstChild; while (ttrr != null) {
           removeEvent(ttrr.lastChild.firstChild, "click", textclick); //这样就可以保证内存不再增加
           ttrr = ttrr.nextSibling;
     } for (var i = 0; i < detail.length; i++) {
       var tr = document.createElement("tr");
       var td1 = document.createElement("td");
       var text1 = document.createTextNode(detail[i].item);   td1.appendChild(text1);
       tr.appendChild(td1);
       tbody.appendChild(tr);
      

  4.   

    不好意思贴代码少贴了几行var tbody = document.getElementById("table_board_detail").lastChild; //table中有thead、tbody
     var ttrr = tbody.firstChild;   
         while(tbody.firstChild) {                  //忘记贴的代码,这一步是最关键的
              tbody.removeChild(tbody.firstChild);
         }
       while (ttrr != null) {
      removeEvent(ttrr.lastChild.firstChild, "click", textclick); //这样就可以保证内存不再增加
      ttrr = ttrr.nextSibling;
     } for (var i = 0; i < detail.length; i++) {
      var tr = document.createElement("tr");
      var td1 = document.createElement("td");
      var text1 = document.createTextNode(detail[i].item);  td1.appendChild(text1);
      tr.appendChild(td1);
      tbody.appendChild(tr);
      

  5.   

    但是最后一行报的错误,哪位能解决下啊,在IE下是没有错误的,在火狐下就有。
    错误提示:
    Node cannot be inserted at the specified point in the hierarchy" code: "3
    [Break on this error] tbody.appendChild(tr);  
      

  6.   

    ff不认为tbody是table的lastchild,所以你应该是直接给tbody加个ID,直接取。或者用
    var tbody = document.getElementById("table_board_detail").childNodes[1]这种方式来获取tbody对象
      

  7.   

    js内存不是人为管理的,但是内存的使用还是有技巧的。占用内存的主要是节点(dom node/element)和js的脚本对象,脚本对象好检查,最终要的是,被删除的节点,不要有任何脚本变量保存着引用状态,那么节点所占用的内存过段时间,自然会删除。