代码之家  ›  专栏  ›  技术社区  ›  Jordan Parmer

在Internet Explorer中使用javascript,如何在不刷新页面的情况下清除内存?

  •  1
  • Jordan Parmer  · 技术社区  · 16 年前

    我有一个基于Ajax的网站,在客户机上使用javascript。站点上的某些操作缓存来自浏览器中服务调用的大型结果集(即数百兆字节)。这些都是丢掉的结果。它们将在短时间内被查看,然后需要从内存中清除。

    我写了一个小测试站点,它在内存中加载一堆垃圾,然后调用javascript delete 方法。这在Firefox中很好用(内存几乎会立即返回)。Internet Explorer 8(尚未尝试7)在刷新或关闭页面之前不会释放内存。

    有人知道如何使用javascript/ajax删除IE的内存使用量吗(不刷新页面)?

    以下是我的示例客户端代码:

    function load() {
     var x = ['dfjasdlfkjsa;dflkjsad;flkjsadf;lj'];
    
     for( var i = 0; i < 10000000; ++i ) {
      x.push('asdfasfasfsfasdfkasjfslafkjslfjsalfjsaldfkjasl;dfkjsadfl;kjsdflskajflskfjslakfjaslfkjsaldfkjsaldfksdfjk');
     }
    
     alert('deleting');   // <--- memory usage around 500mb
     delete x;            // <--- immediate results in Firefox 3.5 (not IE8)
     alert('done');
    }
    

    更新: 将变量设置为“null”不会立即清除内存(因为内存留给垃圾收集器)。此外,设置变量空值只会在可能有多个引用的情况下获取一个引用。

    5 回复  |  直到 16 年前
        1
  •  1
  •   kangax    16 年前

    ie(从技术上讲,jscript)已经 an undocumented CollectGarbage method 据推测 强制垃圾收集器立即运行 . 你可能想玩这个,但根据我的经验, null 大多数时候,引用已经足够了。

        2
  •  1
  •   Community Mohan Dere    9 年前

    不要使用delete方法,而是将变量设置为 null . 这似乎是清除跨浏览器内存的最佳方法( delete 是出了名的脆弱)。它和我的另一个答案一样 here .

    alert('deleting');   // <--- memory usage around 500mb
    x = null;
    alert('done');
    
        3
  •  1
  •   pagra    16 年前

    如果你尝试“x=null”;而不是删除?

        4
  •  1
  •   Christian C. Salvadó    16 年前

    只需将空值赋给变量:

    x = null;
    
        5
  •  1
  •   James Black    16 年前

    我知道您提到了数据被丢弃,但是,当您删除节点时,即使只是将x设置为空,也需要确保没有任何事件处理程序附加到任何节点,否则该节点不能被垃圾收集。

    以下是我在自己的代码中使用的函数: http://javascript.crockford.com/memory/leak.html