Zaczynamy intensywniej wykorzystywać GWT w naszych projektach, a wydajność kompilatora GWT staje się coraz bardziej irytująca.
Zaczniemy zmieniać nasze praktyki robocze w celu złagodzenia problemu, w tym większy nacisk na przeglądarkę trybu hostowanego, która odracza potrzebę uruchamiania kompilatora GWT do późniejszego czasu, ale wiąże się to z własnym ryzykiem, szczególnie z ryzykiem nie wychwytuje problemów z prawdziwymi przeglądarkami dużo później niż byśmy tego chcieli.
Idealnie byłoby, gdyby sam kompilator GWT był szybszy - wystarczy chwilę, aby skompilować dość małą aplikację. Używamy jednak kompilacji, jeśli jest to dość naiwny sposób, więc mam nadzieję, że uda nam się szybko i łatwo osiągnąć korzyści.
Obecnie przywołujemy com.google.gwt.dev.Compiler jako aplikację Java z docelowego obiektu Ant Ant z maksymalną stertą 256 m i dużą ilością miejsca na stosie. Kompilator jest uruchamiany przez Ant przy użyciu fork = true i najnowszej wersji JRE Java 6, aby skorzystać z lepszej wydajności Java6. Przekazujemy naszą główną klasę kontrolera do kompilatora wraz ze ścieżką klasy aplikacji i jest wyłączona.
Co jeszcze możemy zrobić, aby uzyskać dodatkową prędkość? Czy możemy podać mu więcej informacji, aby mniej czasu poświęcił na odkrycie, co robić?
Wiem, że możemy powiedzieć, aby kompilowała się tylko dla jednej przeglądarki, ale musimy przeprowadzić testy dla wielu przeglądarek, więc to nie jest tak naprawdę praktyczne.
Wszystkie sugestie są mile widziane w tym miejscu.
źródło
Jeśli uruchomisz kompilator GWT z flagą -localWorkers, kompilator skompiluje wiele permutacji równolegle. Pozwala to na użycie wszystkich rdzeni maszyny wielordzeniowej, na przykład -localWorkers 2 powie kompilatorowi, aby skompilował dwie permutacje równolegle. Nie dostaniesz różnic rzędu wielkości (nie wszystko w kompilatorze można zrównoleglać), ale nadal jest zauważalne przyspieszenie, jeśli kompilujesz wiele permutacji.
Jeśli chcesz korzystać z wersji łącza GWT, możesz używać trybu hostowanego dla dowolnej przeglądarki ( poza hostowanym trybem hostowanym ), co łagodzi większość bieżących problemów z trybem hostowanym. Wydaje się, że właśnie tam zmierza GWT - zawsze rozwijaj w trybie hostowanym, ponieważ kompilacje prawdopodobnie nie będą szybciej uzyskiwać wielkości.
źródło
Chociaż ten wpis jest dość stary i większość z was prawdopodobnie już wie, myślę, że warto wspomnieć, że GWT 2.x zawiera nową flagę kompilacji, która przyspiesza kompilacje poprzez pomijanie optymalizacji. Zdecydowanie nie powinieneś instalować JavaScript skompilowanego w ten sposób, ale może to być oszczędność czasu podczas ciągłych kompilacji nieprodukcyjnych.
Wystarczy dołączyć flagę: -draftCompile do linii kompilatora GWT.
źródło
Oto lista wartości user.agent, które możesz ustawić na.
(W tym miejscu dodać, bo utrzymanie kończący się tutaj podczas wyszukiwania, co mam ustawić, aby produkować tylko permutacji dla Chrome Odpowiedź brzmi:.
<set-property name="user.agent" value="safari"/>
)źródło
W nowszych wersjach GWT (jak sądzę, począwszy od wersji 2.3 lub 2.4) można również dodać
na gwt.xml w celach programistycznych. Dzięki temu kompilator GWT utworzy jedną permutację, która obejmie wszystkie ustawienia narodowe i przeglądarki. Dlatego nadal możesz testować we wszystkich przeglądarkach i językach, ale nadal kompilujesz tylko jedną permutację
źródło
Możesz dodać jedną opcję do swojej kompilacji do produkcji:
-localWorkers 8
- gdzie 8 to liczba współbieżnych wątków, które obliczają permutacje. Wszystko, co musisz zrobić, to dostosować ten numer do liczby, która będzie dla Ciebie wygodniejsza. Zobacz wydajność kompilacji GWT (dzięki komentarzowi Dennisa Ich).Jeśli kompilujesz się w środowisku testowym, możesz także użyć:
-draftCompile
co umożliwia szybsze, ale mniej zoptymalizowane kompilacje-optimize 0
co nie optymalizuje kodu (9 to maksymalna wartość optymalizacji)Kolejną rzeczą, która ponad dwukrotnie zwiększyła wydajność kompilacji i trybu hostowanego, było użycie dysku SSD (teraz tryb hostowany działa jak urok). To nie jest tanie rozwiązanie, ale w zależności od tego, ile korzystasz z GWT i kosztu twojego czasu, może być tego warte!
Mam nadzieję, że to ci pomoże!
źródło
Kompilator GWT przeprowadza wiele analiz kodu, więc przyspieszenie będzie trudne. Ta sesja od Google IO 2008 da ci dobre wyobrażenie o tym, co robi GWT i dlaczego trwa tak długo.
Moje zalecenie dotyczy programowania w jak największym stopniu używaj trybu hostowanego, a następnie kompiluj tylko wtedy, gdy chcesz przeprowadzić testowanie. To brzmi jak rozwiązanie, które już przyszedłeś, ale w zasadzie właśnie dlatego istnieje Tryb Hostowany (cóż, to i debugowanie).
Możesz przyspieszyć kompilację GWT, ale tylko kompilację dla niektórych przeglądarek, zamiast 5 rodzajów, które GWT domyślnie robi. Jeśli chcesz korzystać z trybu hostowanego, upewnij się, że kompilujesz dla co najmniej dwóch przeglądarek; jeśli kompilujesz dla jednej przeglądarki, kod wykrywania przeglądarki jest optymalizowany, a następnie Tryb hostowany już nie działa.
Prostym sposobem na skonfigurowanie kompilacji dla mniejszej liczby przeglądarek jest utworzenie drugiego modułu, który dziedziczy z głównego modułu:
Jeśli
rename-to
atrybut jest ustawiony tak samo, pliki wyjściowe będą takie same, jakbyś zrobił pełną kompilacjęźródło
źródło
W przypadku GWT 2.x właśnie odkryłem, że jeśli używasz
Możesz nawet podać więcej niż jedną permutację.
źródło