b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

解决办法:针对JS内存泄漏的几种解决方案

电脑杂谈  发布时间:2020-09-02 03:01:53  来源:网络整理

js内存泄漏的例子_js内存泄漏及解决方法_win10内存泄漏怎么解决

一个,什么是内存泄漏

内存泄漏意味着在浏览器进程结束之前,既不能使用也不能回收分配的内存. 在C ++中,因为内存是手动管理的,所以内存泄漏很常见. 现在C#和Java等流行语言使用自动垃圾回收方法来管理内存,在正常使用下几乎不会发生内存泄漏. 浏览器还使用自动垃圾收集来管理内存,但是由于浏览器的垃圾收集方法中的错误,会发生内存泄漏.

两种,几种内存泄漏情况

1. 当页面上的元素被删除或替换时,如果绑定到该元素的事件仍未被删除,则在IE中将无法对其进行正确处理. 这时,必须手动删除该事件,否则会有内存让位.

复制代码

复制代码

应更改为以下内容

复制代码

js内存泄漏及解决方法_js内存泄漏的例子_win10内存泄漏怎么解决

复制代码

或使用事件委托

复制代码

复制代码

2

var a = document.getElementById(“ xx”);

var b = document.getElementById(“ xxx”);

a.r = b;

b.r = a;

js内存泄漏的例子_win10内存泄漏怎么解决_js内存泄漏及解决方法

var a=document.getElementById("xx");
a.r=a;

对于纯ECMAScript对象,只要没有其他对象引用对象a和b,这意味着它们只是彼此引用,则垃圾收集系统仍将识别并处理它们. 但是,在Internet Explorer中,如果循环引用中的任何对象是DOM节点或ActiveX对象,则垃圾收集系统将不会发现它们之间的循环关系与系统中的其他对象隔离开并释放它们. 最终,它们将保留在内存中,直到关闭浏览器.

3

复制代码

function bindEvent() 
{ 
    var obj=document.createElement("XXX"); 
    obj.onclick=function(){ 
        //Even if it's a empty function 
    } 
}

复制代码

闭包可以在函数中维护局部变量,以使其无法释放.

在上面的示例中定义了事件回调时,由于该函数是在函数内部定义的,并且内部函数-公开了事件回调的引用,因此形成了闭包

解决方案是在外部定义事件处理功能,并取消关闭闭包

复制代码

js内存泄漏的例子_js内存泄漏及解决方法_win10内存泄漏怎么解决

function bindEvent() 
{ 
    var obj=document.createElement("XXX"); 
    obj.onclick=onclickHandler; 
} 
function onclickHandler(){ 
    //do something 
}

复制代码

或者在定义事件处理功能的中的无用属性以减少内存消耗)

复制代码

function bindEvent() 
{ 
    var obj=document.createElement("XXX"); 
    obj.onclick=function(){ 
        //Even if it's a empty function 
    } 
    obj=null; 
}

复制代码

4

a = {p: {x: 1}};
b = a.p;
delete a.p;

执行此代码后,b.x的值仍为1. 由于删除的属性引用仍然存在,因此在某些JavaScript实现中,由于此不精确的代码可能导致内存泄漏. 因此,销毁对象时,有必要遍历属性中的属性并依次删除它们.

5. 自动类型包装转换

win10内存泄漏怎么解决_js内存泄漏的例子_js内存泄漏及解决方法

看看Internet上的信息,据说以下代码将导致ie系列中的内存泄漏. 让我先提醒您,无论它是否泄漏.

var s=”lalala”;
alert(s.length);

本身是一个字符串而不是一个对象,它没有length属性,因此,在访问length时,JS引擎将自动创建一个临时String对象来封装s,并且该对象肯定会泄漏. 这个错误是无法想象的. 幸运的是,这很容易解决. 记住要做所有的值类型. 操作前显式转换:

var s="lalala";
alert(new String(s).length);

6,一些DOM操作

IE系列的唯一问题是将Child附加到不在DOM树上的DOM元素. 在IE7中,为了改善内存泄漏,IE7采取了一种极端的解决方案: 在离开页面Elements时回收所有DOM树,其他所有内容都将被忽略.

本文的首次出版:

以上知识点来自“ JavaScript高级编程”和“ JavaScript授权指南”以及#clSto

“ JavaScript高级编程”的内存部分

要包含在内


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-312042-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 王林洋
        王林洋

        降息不会对股市产生任何作用

      • 于国平
        于国平

        大东沟海战中

      每日福利
      热点图片
      拼命载入中...