Sam badam to. Pracuję na raczej starym sprzęcie w nieakceptowanej przeglądarce. Wstępne renderowanie jest problemem. Wcześniejsze prace polegały na buforowaniu wstępnie skompilowanych szablonów, gdy próbujesz. Odkryłem, że zapewnia to tylko minimalną poprawę prędkości.
Rzeczywiste wąskie gardło pochodziło z moich dyrektyw powtarzania ng, liczby wyników, które powstały i liczby węzłów/obserwatorów DOM, które budowałem w każdej iteracji.
Niektóre źródła sugerują utworzenie niestandardowej dyrektywy, która ręcznie składa dom i dołącza ją za jednym razem. Rezultatem jest bardzo mały przepływ i brak obserwatorów. Minusem jest bardzo duży. Nigdy więcej kątowej zabawy i niepotrzebnej pracy. Co ważniejsze, żadna z nich nie zapewniała wystarczająco dużej poprawy prędkości, aby usprawiedliwić pracę.
Ostatecznie odkryłem, że najlepsze przyspieszenie prędkości wynika z wymuszania akceleracji sprzętowej dla każdej iteracji powtórzeń ng. Jak zasugerowano powyżej, dyrektywa ng-animate w nowszych wersjach kątowych sprawia, że jest to względnie banalne.
Zobaczysz natychmiastowe renderowanie strony z niewielkimi drobnymi przerwami w przepływie. Ng-cloak tu nie pomaga. Ze względu na żądanie animacji strona nie jest przytwierdzona do zamaskowania, podczas gdy powtarzanie jest renderowane.Te mogą jednak być dość dobrze wykonane z odrobiną sprytnej zabawy. Właściwie ukrywam powtórzenie ng, aż zmieni się lokalizacja $, pokazując w międzyczasie wskaźnik postępu, a następnie przełączając się na mój ng-show. Działa to naprawdę ładnie.
Powiedziawszy to wszystko, wstępne kompilowanie szablonów powinno być wykonane w następujący sposób.
1) Po uruchomieniu aplikacji utwórz nową pamięć podręczną. Patrz: http://docs-angularjs-org-dev.appspot.com/api/ng. $ CacheFactory
2) Zapełnij tę pamięć podręczną szablonami skompilowanymi. Inject $ compile i wywołaj go na każdym szablonie. Kompilacja zwraca funkcję, którą później wywołasz w swoim zasięgu. Wprowadź tę funkcję w pamięci podręcznej, jak uważasz.
3) Utwórz niestandardową dyrektywę, która będzie akceptować klucz pamięci podręcznej jako atrybut. Wewnątrz tej dyrektywy zapytaj pamięć podręczną kompilacji o poprawną funkcję kompilacji. Wywołaj funkcję w stosunku do bieżącego zakresu i dołącz wynikowy DOM do elementu przekazanego do dyrektywy.
4) Sorta win :).
Możesz ukryć/pokazać obszary za pomocą [ng-show] (http://docs.angularjs.org/api/ng.directive:ngShow). również możesz zajrzeć do [$ templateCache] (http://docs.angularjs.org/api/ng.$templateCache), które pozwoli Ci na buforowanie twoich widoków. –
Sądzę, że mógłbym nam pokazać, ale czy nie musiałbym wyrzucać rutera i zarządzania adresami URL, które zapewnia Angular? Nie jestem całkowicie pewny, jak korzystać z szablonu $ templateCache, czy mogę ustawić wszystko tak, aby wszystkie szablony były buforowane? –
Można użyć dwóch aplikacji ng do zarządzania dwoma zachowaniami. – GnrlBzik