在Internet Explorer中使用JavaScript,如何在不刷新页面的情况下清除内存?
我有一个基于AJAX的网站,在客户端使用JavaScript。站点上的某些操作会缓存浏览器中服务调用的大型结果集(即数百兆字节)。这些都是一次性的结果。它们将被查看一小段时间,然后需要从内存中清除 我编写了一个小测试站点,它在内存中加载了一堆垃圾,然后调用JavaScript的在Internet Explorer中使用JavaScript,如何在不刷新页面的情况下清除内存?,javascript,ajax,internet-explorer,memory,memory-management,Javascript,Ajax,Internet Explorer,Memory,Memory Management,我有一个基于AJAX的网站,在客户端使用JavaScript。站点上的某些操作会缓存浏览器中服务调用的大型结果集(即数百兆字节)。这些都是一次性的结果。它们将被查看一小段时间,然后需要从内存中清除 我编写了一个小测试站点,它在内存中加载了一堆垃圾,然后调用JavaScript的delete方法。这在Firefox中非常有效(内存几乎会立即返回)。Internet Explorer 8(尚未尝试7)在刷新或关闭页面之前不会释放内存 有人知道如何使用JavaScript/Ajax(无页面刷新)降低I
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');
}
函数加载(){
var x=['dfjasdlfkjsa;dflkjsad;flkjsadf;lj'];
对于(变量i=0;i<10000000;++i){
x、 push('asdfasfasfsfasdfkasjfslafkjslfjsalfkjsl;dfkjsadfl;kjsdflskajflskfjslakfjaslfkjsaldfksdjk');
}
警报('deleting');//不要使用delete方法,而是将变量设置为null
。这似乎是跨浏览器清除内存的最佳方法(delete
是出了名的古怪)。它的工作原理与我的另一个答案相同
alert('deleting');//不要使用delete方法,而是将变量设置为null
。这似乎是跨浏览器清除内存的最佳方法(delete
是出了名的古怪)。它的工作原理与我的另一个答案相同
alert('deleting');//如果您尝试“x=null;”而不是delete?如果您尝试“x=null;”而不是delete?只需将null分配给变量:
x = null;
只需将null赋值给变量:
x = null;
我知道您提到的数据是丢弃的,但是,当您删除节点时,即使只是将x设置为null,您也需要确保没有任何事件处理程序附加到任何节点,否则无法对该节点进行垃圾收集
以下是我在自己的代码中使用的函数:
我知道您提到的数据是丢弃的,但是,当您删除节点时,即使只是将x设置为null,您也需要确保没有任何事件处理程序附加到任何节点,否则无法对该节点进行垃圾收集
以下是我在自己的代码中使用的函数:
IE(从技术上讲,是JScript)有,这可能会迫使垃圾收集器立即运行。你可能想玩这个,但根据我的经验,null
ing引用在大多数情况下就足够了。IE(从技术上讲,是JScript)has,它应该是强制垃圾收集器立即运行。您可能想使用它,但根据我的经验,null
在大多数情况下调用引用就足够了。但是如果我有多个变量指向同一个对象呢?null只会终止单个引用。是的,您是是的,如果是这样的话,因为delete操作符在IE上不太好用,你可以取消你创建的所有对象引用,这是一个有缺陷的垃圾收集器的代价…如果可以,鼓励你的用户使用一个好的浏览器:-)但是如果我有多个变量指向同一个对象呢?Null只会终止单个引用。是的,你是对的,如果是这样的话,因为delete操作符在IE上工作得不太好,你可以将你创建的所有对象引用都置为Null,这就是有一个有缺陷的垃圾收集器的代价……如果可以,鼓励你的用户使用一个好的浏览器:-)但是当e我有多个变量指向同一个对象?Null只会终止单个引用。@j0rdan当你对一个对象有多个引用时,垃圾收集器显然不会对该对象进行垃圾收集,直到所有引用都被捕获为存在。Null
't可用于垃圾收集,下次GC运行时可以清除。但是如果我有多个变量指向同一个对象,该怎么办?Null只会终止单个引用。@j0rdan当您对一个对象有多个引用时,垃圾收集器显然不会垃圾收集该对象,直到所有引用都被删除为止对一个对象的所有引用进行赋值只会让GC知道该对象可用于垃圾收集,并且可以在下次GC运行时清除