如何避免浏览器崩溃?

时间:2012-05-02 10:29:33

标签: facebook facebook-fql facebook-javascript-sdk

我需要一种方法来获取用户的朋友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消耗方法?

1 个答案:

答案 0 :(得分:3)

至少,在变量中编译所有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引擎联结。