2012-05-02 146 views
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消耗的方法嗎?

回答

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引擎交界處。