在图像之间切换时Javascript内存泄漏(FireFox4)

时间:2011-04-06 14:41:39

标签: javascript firefox memory-leaks

我有,我认为,这是一个相当微不足道的javascript。 如果我运行速度非常快,那么情况就会恶化,FireFox 4中的内存分配会不断增加。我尝试使用chrome并且内存似乎保持稳定。

这是一个FF4问题还是我的JavaScript构建得很差?

注意页面上没有加载其他JS文件。我在“安全模式”下运行FF,禁用所有插件。没有加载其他标签。

<img id="heartbeat" name="heartbeat" src="/web/resources/graphics/greylight.png" />

    <script type="text/javascript">

        var hasTimedout = 1;
        var lastPollTime = new Date();;
        var maxDifference = 6000 * 2; //allows us to miss one poll of the data without showing anything bad

        function heartbeat()
        {
            var curTime = new Date();

            var diff = curTime.getTime() - lastPollTime.getTime();

            if (diff > maxDifference && hasTimedout == 0)
            {
                document.getElementById('heartbeat').src = '/web/resources/graphics/greylight.png';

                hasTimedout = 1;
            }
            else if (diff < maxDifference && hasTimedout == 1)
            {
                document.getElementById('heartbeat').src = '/web/resources/graphics/greenlight.png';

                hasTimedout = 0;
            }

            toggle_visibility('heartbeat');
        }

        function toggle_visibility(id) {
           var e = document.getElementById(id);
           if (e.style.display == 'block')
              e.style.display = 'none';
           else
              e.style.display = 'block';
        }

        setInterval("heartbeat()",20);    
    </script>

1 个答案:

答案 0 :(得分:2)

有关Javascript垃圾收集的一些信息:SO Thread on JS GC

特别感兴趣(也许):

  • 使用删除语句。无论何时你 使用new创建一个对象 声明,将其与删除配对 声明。这确保了所有 与...相关的记忆 对象,包括其属性名称, 可用于垃圾收集。 讨论了删除语句 更多“解放对象”。
  • 使用var关键字。任何变量 没有var关键字创建的是 在全球范围内创建并且是 从来没有资格垃圾 收集,呈现 内存泄漏的机会。

我只能断定你应该尝试使用“new”关键字将对象创建与delete语句配对,看看是否会产生影响。

否则代码看起来很好。