2015-08-04 18 views
8

Próbuję przyspieszyć moją stronę. To właśnie znalazłem w narzędziach deweloperskich Chrome w Timeline/Profile JS. Zawiera 150 takich niebieskich parse HTML (na ekranie).angular.js - funkcja analizowania html zajmuje 2000 ms i wiele więcej.

enter image description here

To 50% czasu ładowania. Testowałem go za pomocą tabletu, a funkcja ta trwała nawet 15000ms! Konfiguruję dostawcę trasy:

var start = '<div class="important">'; 
var end = '</div>'; 
$routeProvider.when('/test', { 
    template: start + 'some short text' + end 
}); 

Co jest nie tak? Całkowity rozmiar strony internetowej to 500kb. Ma 97 zakresów.

Edycja: jeśli testuję stronę internetową bez użycia kątowego na tablecie, czas ładowania wynosi 2,5 s (jak wskazałem powyżej z kątem, to było więcej niż 18 sekund). Jestem gotów zapłacić za rozwiązanie.

Dodaję także timeline data, który debugowałem (na tablecie). Możesz sprawdzić oś czasu w Chrome. Otwórz konsolę programisty (F12). Kliknij kartę Oś czasu. Kliknij tę kartę prawym przyciskiem myszy, a następnie wybierz opcję Wczytaj dane osi czasu.

Edycja 2: Używam angular-material, i myślę, że to może być problem, a to może wszystkich tych analizować html, ponieważ istnieje na przykład wiele przycisków.

+0

Należy pamiętać, że rozmowy parseHTML są częścią Kątowymi cyklu życia. Jak często używasz ng-repeat? – user2977636

+0

istnieje tylko jeden ng-repeat i to był pusty (0 szt) gdy brałem tego testu (zwykle ma około 5 pozycji) – dontHaveName

+0

@dontHaveName Myślę, że jeśli ktoś został przez tego samego problemu trudno pomóc, nie widząc jakiś aktualny kod. –

Odpowiedz

1

Nie pisać kod, ale poniżej wolnych twórców:

  • Zbyt wiele powracających, repaints, parseHTML
  • Powolne brudny sprawdzenie
  • Zbyt wiele operacji DOM

W krótkich rozwiązaniach poniżej:

  • Dyrektywy z szablonami inline
  • Zastosowanie $ templateCache
  • Reuse pamięci zamiast przydzielania nowa pamięć
  • Używaj mniej zegarka
  • tworzenie elementem Defer
  • uniknięcia dużych i złożonych NG-powtórzenia (zastosowanie paginacji na przykład)
  • Zapobieganie wielu (początkowym) żądaniom ze strony

Gdzie jest źle?

Użyj narzędzia oprócz paska deweloperów Chrome jako Batarang do debugowania i profilowania aplikacji angularjs. Pobierz go z: https://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmcojjgiloacoafjmpfk

Czytaj więcej:

Powiązane problemy