如何避免使浏览器崩溃?

问题描述:

我需要一种方法来获取用户的朋友ID。 我写了这个代码,但我的浏览器崩溃(也许是因为我有2500级的朋友):如何避免使浏览器崩溃?

var query = FB.Data.query('SELECT uid2 FROM friend WHERE uid1 = me()'); 

query.wait(function(rows) { 
    var i; 
    for(i=0;i<rows.length;i++){ 
     document.getElementById('friends').innerHTML += i + ') ' + rows[i].uid2 + '<br />'; 

    }}); 

是否有更少的CPU消耗的方法吗?

至少,在一个变量中编译所有的HTML,然后在一个.innerHTML赋值中将它传递给DOM。现在,您的强制页面为您的每个2500位朋友重绘两次,因为浏览器需要更新自己对innerHTML页面的内部理解,请参阅+=,然后再写回。

query.wait(function(rows) { 
    var i; 
    var html = ""; 
    for(i=0;i<rows.length;i++){ 
     html += i + ') ' + rows[i].uid2 + '<br />'; 
    } 
    document.getElementById('friends').innerHTML = html 
} 

您还可以使用其他一些方法,如在阵列中存储生成的字符串,然后join在一起,荷兰国际集团和它们分配给HTML,但是这只是围绕优化JS不变字符串和垃圾收集器。一些JS引擎最终可能会做得更好,你可以手动完成。然而,一次完成innerHTML赋值几乎可以保证大幅度提高速度,因为它实际上意味着“重新生成所有内容,然后再应用一点点并将所有内容都重新编码”,并且几乎没有任何方法可以自动优化在JS + HTML引擎交界处。