0

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

4

1 回答 1

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 引擎连接。

于 2012-05-02T10:31:50.293 回答