2013-02-19 60 views
6

我正在爲Delicious書籤寫一個Chrome擴展。我的background.js文件在打開的瀏覽器中獲取書籤並創建jsTree構建適當的樹所需的對象。jsTree排序功能可笑地慢

如果我禁用jsTree的排序插件,當我單擊彈出窗口時,書籤立即出現。如果啓用排序功能,則點擊和顯示數據之間會有大約2秒的延遲。

我試着預先排序後臺腳本中的所有數據,並將其傳遞給彈出的預先排序的,但jsTree不尊重這個排序的數據。

我只有~90個標籤和~400個書籤。有一個配置選項,我可以用它來使這個更快?這是我的jsTree的樣子。

$('#jstree').jstree({ 
    'close_all': -1, 
    'core': { 
     'animation': 0 
    }, 
     'json_data': { 
     'async': true, 
     'data': data 
    }, 

    'progressive_render': true, 
    'themes': { 
     'theme': 'classic', 
     'dots': false, 
     'icons': true 
    }, 

    'sort': function (a, b) { 
     return this.get_text(a) > this.get_text(b) ? 1 : -1; 
    }, 

    'types': { 
     'valid_children': [ 'folder' ], 
     'types': { 
      'folder': { 
       'valid_children': [ 'file' ], 
       'max_depth': 1 
      }, 
     } 
    }, 

    'plugins': [ 
     'json_data', 
     'themes', 
     'sort', 
     'types', 
    ] 
}); 
+0

只是一個評論:我不知道爲什麼你的速度很慢,但我正在運行帶有遞歸遍歷目錄的服務器端調用jstree - 至少300個文件,並返回html - 然後循環遍歷所有帶'$ .each'的html,它在不到一秒的時間內返回。我的觀點是這個問題可能在別處。 – user1167442 2013-09-09 23:59:42

+0

除了添加其他選項之外,請嘗試禁用您可以選擇的每個選項,以查看它是否更快速。嘗試禁用排序功能,因爲您已經預先排序... – 2013-09-13 07:35:47

+0

「this.get_text」在做什麼?也許這是昂貴的功能? – mitchfuku 2013-09-29 10:50:30

回答

2

jsTree使用本地陣列sort方法,這樣可以提高的唯一的事情就是get_text來電,但我懷疑,可以得到更快。

如果你有你的數據預分類 - 只需從plugins配置數組中刪除排序插件。排序插件無法「知道」數據已被排序,只需刪除該插件即可。