JQuery的setInterval的有追加,增加内存(JQuery setInterval wit

2019-10-20 07:06发布

对不起,我的英语不好。

我创建了一个聊天系统与jQuery,当我试图取代内容(如用户在线,离线或消息recived)它完美,但开始有越来越慢,导致JavaScript开始采取更多的内存。

$(document).ready(function(e) {
data = '<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>';

$("body").empty().append(data);

setInterval(function(){
    $("body").empty().append(data);
    }, 1000);

}); //document

谷歌浏览器测试(因为我是新的,我不能在这里发表图片)。 出现在时间轴内存越来越多,和节点(绿线)压痕的楼梯,所有的时间。

我已经与测试:

document.getElementById("selector_inthiscasetheidofthebody").innerHTML="";

接着

document.getElementById("selector_inthiscasetheidofthebody").innerHTML=data;
  • 我使用setTimeout方法insted的的setInterval

  • 我试着用html() jQuery的方法

这是图像:

任何其他的想法? 谢谢。

Answer 1:

我找到了! 你不能避免增加内存和节点,但你可以控制他们! 这是代码:

    $(document).ready(function(e) {

// Possible data    
data = '<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>';

// Clean all that browsers changes, like putting styles inline, etc. Data and html appened, must be the same
function clean(a){
    if((a != 'undefined') && (a != null)){
    a = a.replace(/(\ style=".*?")/gi,'').replace(/(<tbody>)/gi,'').replace(/(<\/tbody>)/gi,'').replace(/(\&amp\;)/gi,'&').replace(/(\&lt\;)/gi,'<').replace(/(\&gt\;)/gi,'>').replace(/(\")/gi,"'");
    return a.trim();
    }
    };

// If they are different, then append data. So, you only append data in case information changes.
function inyectar(a,b){
    if(clean($(a).html()) != clean(b)){
        $(a).empty().append(b);
        }
    }

setInterval(function(){
    inyectar("body",data);
        }, 1000);
});


文章来源: JQuery setInterval with append, increase memory