2013-02-19 13 views
6

Piszę rozszerzenie Chrome dla Delicious zakładek. Mój plik background.js pobiera zakładki z przeglądarki i tworzy obiekt wymagany dla jsTree do zbudowania odpowiedniego drzewa.Funkcja sortowania jsTree śmiesznie wolno

Jeśli wyłączysz wtyczkę jsTree, zakładki pojawią się natychmiast po kliknięciu wyskakującego okienka. Jeśli włączę funkcję sortowania, między dwukrotnym kliknięciem a wyświetlaniem danych występuje ~ 2 sekundowe opóźnienie.

Próbowałem sortować wszystkie moje dane w skrypcie w tle i przesyłać je do podręcznego sortowania, ale jsTree nie honoruje tych posortowanych danych.

Mam tylko ~ 90 znaczników i ~ 400 zakładek. Czy istnieje opcja konfiguracji, której mogę użyć, aby przyspieszyć działanie? Oto jak wygląda mój 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

Tylko komentarz: Nie wiem, dlaczego twój jest powolny, ale używam jstree z wywołaniem po stronie serwera, które przemierza katalog rekurencyjnie - co najmniej 300 plików, i zwraca kod HTML - a następnie przechodzę przez wszystkie html z '$ .each' i powraca w mniej niż sekundę. Chodzi mi o to, że problem może leżeć gdzie indziej. – user1167442

+0

Zamiast dodawać inne opcje, spróbuj wyłączyć każdą opcję, aby sprawdzić, czy robi się szybciej ... np. spróbuj wyłączyć funkcję sortowania, ponieważ masz wstępnie posortowane ... –

+0

co robi '' this.get_text''? może to jest droga funkcja? – mitchfuku

Odpowiedz

2

jsTree wykorzystuje natywne tablica sort metodę, więc jedyne, co można poprawić to połączenia do get_text, ale wątpię, że można uzyskać znacznie szybciej.

Jeśli masz dane wcześniej sortowane - po prostu usuń wtyczkę sort z tablicy konfiguracyjnej plugins. Plugin sort nie może "wiedzieć", że dane są już posortowane, wystarczy usunąć wtyczkę.