js DOM 内存泄露 要点

    

 1、可以通过Drip-0.5来测 JSVM2的泄漏

         http://www.script8.com/download/drip.rar

2、看代码中是不是存在

      循环引用(Circular References) — IE浏览器的COM组件产生的对象实例和网页脚本引擎产生的对象实例相互引用,就会造成内存泄漏。这也是Web页面中我们遇到的最常见和主要的泄漏方式。

    例子:

<html>
    
<head>
        
<script language="JScript">
        
var myGlobalObject;
        
function SetupLeak()
        
{
            
// First set up the script scope to element reference
            myGlobalObject = document.getElementById("LeakedDiv");

            
// Next set up the element to script scope reference
            document.getElementById("LeakedDiv").expandoProperty = myGlobalObject;
        }


        
function BreakLeak()
        
{
            document.getElementById(
"LeakedDiv").expandoProperty = null;
        }

        
</script>
    
</head>
    
<body onload="SetupLeak()" onunload="BreakLeak()">
        
<div id="LeakedDiv"></div>
    
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在中,内存泄漏是指不再需要的内存没有被正确释放,导致内存占用不断增加,最终导致程序性能下降或崩溃。引起内存泄漏的原因有很多,以下是一些常见的原因: 1. 意外地创建全局变量:如果在函数中没有使用var、let或const关键字声明变量,那么该变量将成为全局变量,即使函数执行完毕后也不会被回收。 2. 定时器未清除:如果在使用setInterval或setTimeout创建定时器后,没有及时清除定时器,那么定时器中引用的函数和变量将不会被释放。 3. 闭包中引用的外部变量未释放:闭包是指一个函数与其相关的引用环境组合的组合体。如果一个函数内部定义了一个函数,并且内部函数引用了外部函数的变量,那么即使外部函数执行完毕,内部函数仍然保持对外部函数变量的引用,导致内存泄漏。 4. DOM元素引用未释放:在JavaScript中,通过getElementById等方法获取的DOM元素,如果在程序执行完毕后没有及时释放对该元素的引用,那么该元素将无法被垃圾回收机制回收。 为了避免内存泄漏,可以采取以下措施: 1. 在函数中使用var、let或const关键字声明变量,避免意外地创建全局变量。 2. 在使用定时器后,及时清除定时器,避免定时器中引用的函数和变量无法被释放。 3. 尽量避免使用闭包,或者在使用闭包时,确保闭包中引用的外部变量在不再需要时能够正确释放。 4. 在使用DOM元素后,及时释放对该元素的引用,可以通过将元素设置为null来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值