Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在图像之间切换时Javascript内存泄漏(FireFox4)_Javascript_Firefox_Memory Leaks - Fatal编程技术网

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

在图像之间切换时Javascript内存泄漏(FireFox4),javascript,firefox,memory-leaks,Javascript,Firefox,Memory Leaks,我认为,我有一个相当简单的javascript。 如果我真的运行得很快,那么情况就会恶化,Firefox4中的内存分配就会不断增加。我在chrome上试过,内存似乎保持稳定 这是FF4的问题还是我的JavaScript构建得很差 注意:页面上没有加载其他JS文件。我在“安全模式”下运行FF,所有插件都被禁用。没有加载其他选项卡 <img id="heartbeat" name="heartbeat" src="/web/resources/graphics/greylight.png" /

我认为,我有一个相当简单的javascript。 如果我真的运行得很快,那么情况就会恶化,Firefox4中的内存分配就会不断增加。我在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>

var Hastinmedout=1;
var lastPollTime=新日期();;
var最大差值=6000*2//允许我们在不显示任何不良信息的情况下错过一次数据投票
函数heartbeat()
{
var curTime=新日期();
var diff=curTime.getTime()-lastPollTime.getTime();
if(diff>maxDifference&&hastinmedout==0)
{
document.getElementById('heartbeat').src='/web/resources/graphics/greylight.png';
Hastinmedout=1;
}
else if(diff
有关Javascript垃圾收集的一些信息:

特别感兴趣的(也许):

  • 使用delete语句。每当你 使用新对象创建对象 语句,将其与delete配对 陈述这确保了所有 与数据关联的内存 对象,包括其属性名, 可用于垃圾收集。 讨论delete语句 更多信息请参见“释放对象”
  • 使用var关键字。任何变量 创建时不使用var关键字 在全局范围内创建,并且 从来没有垃圾的资格 收藏,展示 内存泄漏的机会
我只能得出结论,您应该尝试将使用“new”关键字创建的对象与delete语句配对,看看这是否会产生影响


否则代码看起来很好。

请不要将字符串传递给
setInterval
setTimeout
-它是
eval
伪装的:(马特·鲍尔的意思是你的setInterval调用应该是
setInterval(heartbeat,20)
不断无限增加或有时下降?这可能只是FF和Chrome中垃圾收集器之间的差异。您应该使用布尔值表示
Hastinmedout
,那里没有数字的原因。此外,您可以直接减去日期,不需要
。getTime()
首先在他们身上。@Matt感谢
setTimeout
提示。我会改变它。它是一个数字只是因为遗留的原因。@Emmerman-不,它会随着时间的推移不断增加,所以可能不是GC问题。使用
delete
显然有帮助,但它仍然在增加。+1