【问题标题】:What is causing my console crash?是什么导致我的控制台崩溃?
【发布时间】:2014-09-23 23:40:42
【问题描述】:

我编写的一些代码在一系列广告中循环时遇到了问题。 渲染函数在一定间隔内被调用(可配置,但设置为每 50 毫秒以帮助调试)。问题是,当这个函数运行太多次时,控制台会崩溃。在某些手机上,设备会完全耗尽内存并自行重启,我认为与此功能有关(取出控制台不会崩溃):

var render = function(){
    if(ads.length < 1)
        return;
    if(!ads[adIndex]){
        adIndex = 0;
    }
    s = ads[adIndex].src;
    w = ads[adIndex].width;
    $(adContainer).html("<p>ADVERTISEMENT</p><img src = '" + s + "' width = '" + w + "'/>");
    adIndex++;
};

我认为这可能是内存泄漏,但无论如何我都不是内存专家。我可以做些什么来优化此功能并防止内存问题?

编辑:我这样调用代码:

setInterval(function(){
        render();
    }, 50);

ads 数组只是 javascript Image() 对象的数组。

【问题讨论】:

  • 没有足够的代码来说明。怎么叫渲染?
  • setInterval(function(){ render(); }, 50);无法真正发布所有代码,这是一个我已经工作了几个月的非常复杂的网站。
  • 您可能想要显示 ads 对象。并用代码更新您的问题,不要粘贴为评论
  • setInterval(render, 50); 会给你同样的结果,没有无用的包装功能。
  • 我认为崩溃的原因不在这里。是什么让你认为它在这里?

标签: javascript jquery performance memory garbage


【解决方案1】:

我只是认为问题出在代码下面。

$(adContainer)

你每次都创建了 JQuery 对象。

var $adContainer = $(adContainer);
var render = function(){
    if(ads.length < 1)
        return;
    if(!ads[adIndex]){
        adIndex = 0;
    }
    s = ads[adIndex].src;
    w = ads[adIndex].width;
    $adContainer.html("<p>ADVERTISEMENT</p><img src = '" + s + "' width = '" + w + "'/>");
    adIndex++;
};

然后我建议像这样循环使用 setTimeout

【讨论】:

    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    相关资源
    最近更新 更多