javascript内存泄漏

时间:2009-09-14 09:15:07

标签: javascript memory-leaks internet-explorer-6 prototypejs

我正在尝试使用Javascript解决IE中的内存泄漏问题。 Basicaaly我正在使用javascript在图像上添加图标然后我需要 通过删除它们并重新添加它们来定期刷新图标。 当我通过滴水运行应用程序(IE6内存使用指示工具), 当我在重绘之前删除图像时,内存永远不会被回收 任何人都有任何关于如何强迫它回收那些记忆的想法?

下面的代码 - periodicalExecuter是Prototype的计时机制:

<pre>
<head>
    <script src="Prototype/prototype-1.6.0.3.js" type="text/javascript"></script> 
    <style> 
        #container {
            position:absolute;
            left:20px;
            top: 20px;
            height:700px;
            width:700px;
            background-color: pink;
        }
    </style> 
    <script> 
        function addIcons() {
            var ctr = document.getElementById("container");
            var x = 0;
            var y = 0;             
            var x1 = 0;
            var y1 = 0;
            var cnt = 0;
            var imgStr = "";     
            var img; 
            var div1;      
            new PeriodicalExecuter(function(pex) {
                y1 = cnt % 13;
                if (y1 == 0) {
                    x1++;
                }
                x = (x1 + 1) * 21;
                y = (y1 + 1) * 21;    
                div1 = document.createElement('div');                
                div1.id = 'img_' + (x1 - 1).toString() + y1.toString();
                div1.style.position = "absolute";
                div1.style.left = x;
                div1.style.top = y;
                img = document.createElement ('img');
                img.src = 'traffic_icons/traffic-05.gif';                
                div1.appendChild(img);
                ctr.appendChild(div1);
                cnt++;
                if (cnt == 169) {
                    pex.stop();
                    deleteIcons();
                }
            }, 0.1);
        }


        function deleteIcons() {
            var ctr = document.getElementById("container");

            var node = ""; 
            var id = "";           
            for (var k = 0; k < 13; k++) {
                for (var i = 0; i < 13; i++) {                                               
                    id = 'img_' + k.toString() + i.toString();
                    node = document.getElementById(id);        
                    ctr.removeChild(node);                    
                }
            }
            addIcons();
        }
     </script> 
</head> 

<body> 
<div id="container"></div> 
<button onclick="addIcons();" style="position:absolute;left:780px;top:20px">Load Images</button> 
 <button onclick="deleteIcons();" style="position:absolute;left:780px;top:100px">Delete Images</button>
</body> 
</html> 
</pre>

2 个答案:

答案 0 :(得分:1)

您可以尝试通过动态修改图片网址来刷新图片,如下所示:

var imageRefreshCounter = 0;

function refreshIcons() {
            var ctr = document.getElementById("container");

            var node = ""; 
            var id = "";           
            for (var k = 0; k < 13; k++) {
                for (var i = 0; i < 13; i++) {                                               
                    id = 'img_' + k.toString() + i.toString();
                    node = document.getElementById(id);        
                    node.src = node.src + "?" + imageRefreshCounter++;                   
                }
            }
            addIcons();
        }

答案 1 :(得分:0)

你应该升级到1.6.1,它修复了Prototype.js本身的一些漏洞。