GWT speed up

GWT, Java Komentarze (1) »

Ostatnimi czasy dość często muszę kompilować projekt który piszę w GWT - sprawa jest dość uciążliwa bo zajmuje około 6 min, a zdarza mi się robić to kilka a nawet kilkanaście razy dziennie.
Jako że na ogół w trakcie pisania testuje siebie ficzery lub ich kawałki pod jedną przeglądarką (FF) nie potrzebuje ani obsługi wielu języków ani wielu przeglądarek.
Dodatkowo aplikacja może chodzić nieco wolniej niż na produkcji. Godzę się na te kompromisy by zyskać sporo na czasie kompilacji. Jak wiemy każda przerwa wytrąca z rytmu pracy jeśli jest za długa (u mnie już minuta wystarcza :) ). Poniżej kilka sposobów aby nie tracić niepotrzebnie focus’u podczas kompilacji.

Przyspieszanie kompilacji GWT:

  • komentujemy wszystkie języki - czas spadł do 2min 30sec
    
    
  • ustawiamy tylko jedna przeglądarkę (u mnie Firefox)- czas spadł do 40sec
    
    
  • pomijamy optymalizację GWT - czas spadł do 23sec
    
    
    

Całkiem spory zysk: dla przypomnienia startowaliśmy z około 6 minut a skończyliśmy na 23 sekundach - mnie to zadowala :)
A wy jakie macie sposoby by przyspieszyć kompilację ?

GWT + Google AppEngine

Eclipse, GWT, Google, Java Komentarze (0) »

Mam chwile to opisze jak wystartować z Google Web Toolkit. Jakoś po prezentacjach z Programowania Zespołowego ktoś mnie poprosił żebym przybliżył troche GWT w wolnym czasie. Wtedy pisałem jeszcze w GWT 1.5 i porzadnego “Hello World” z uwzględnieniem komunikacji przez RPC nie dało się zrobić tak jak teraz w kilka sekund. No dobra to co bedzie nam potrzebne ? Nie wiele ; ] Odpalamy eclipse’a i doinstalowujemy plugin podając eclipsowi ten url: http://dl.google.com/eclipse/plugin/3.4 . OK gdy już mamy zainstalowany plugin i zresetujemy eclipse’a pojawią nam się m.in 3 nowe ikonki:

  • New Web Aplication Project
  • GWT Compile Project
  • Deploy App Engine Project

Aby stworzyć przykładowy projekt klikamy na New Web Aplication Project lub tradycyjnie tworzymy projekt poprzez New -> Other… -> Google -> Web Application Project. Wpisujemy nazwę i pakiet- zwróćmy uwage by pozostawić zaznaczone checkboxy przy Use Google Web Toolkit i Use Google App Engine gdyż bez nich nie stworzy nam się przykład korzystający z GWT a jedynie przykładowy servlet. No dobra po kliknięciu na Finish mamy już gotową aplikacje w GWT która korzysta z RPC do komunikacji z serwerem. Szkoda że nie było tak fajnie gdy zaczynałem zabawe z GWT - żeby takie coś uzyskać to dosyć długo się naszukałem : ) No ale ok przyjrzyjmy się temu co nam sie wygenerowało. Po pierwsze wygenerowały nam się 3 pakiety w moim przypadku są to:

  • pl.kedziorski.examples.GWT (w tym pakiecie znajduje się plik xml opisujący moduł GWT)
  • pl.kedziorski.examples.GWT.client (klasy klienckie - kompilowane do JavaScript’u)
  • pl.kedziorski.examples.GWT.server (klasy serwerowe - serwlety i to co obliczane po stronie serwera)

[xml]

<module rename-to=’gwt_hello’>
<inherits name=’com.google.gwt.user.User’/>
<inherits name=’com.google.gwt.user.theme.standard.Standard’/>
<entry-point class=’pl.kedziorski.examples.GWT.client.GWT_Hello’/>
</module>

[/xml]

Tag inherits definiuje z z jakich modułów ma dziedziczyć nasz moduł, tag entry-point natomiast definiuje strone startową / punkt wejścia. To ta klasa będzie wywoływana po odwołaniu do modułu.W pakiecie serwera wygenerowała nam się klasa GreetingServiceImpl.java :

[java]

public class GreetingServiceImpl extends RemoteServiceServlet implements
GreetingService {

public String greetServer(String input) {
String serverInfo = getServletContext().getServerInfo();
String userAgent = getThreadLocalRequest().getHeader("User-Agent");
return "Hello, " + input + "!<br><br>I am running " + serverInfo
+ ".<br><br>It looks like you are using:<br>" + userAgent;
}
}

[/java]

Servlet dziedziczący po RemoteServiceServlet z jedna metodą. Od normalnych (nie w GWT) servletów odróznia go jeszcze to, że implementuje interface GreetingService znajdujący się w pakiecie klienckim. W tej klasie bedą wszystkie metody do komunikacji z serwerem. W pakiecie klienckim znajdują się 3 pliki.

Wspomniany wcześniej interface GreetingServic.java

[java]

public interface GreetingService extends RemoteService {
String greetServer(String name);
}

[/java]

Jego asynchroniczna wersja GreetingServiceAsyn.java

[java]

public interface GreetingServiceAsync {
void greetServer(String input, AsyncCallback<String> callback);
}

[/java]

Oba interfejsy musze deklarować te same metody z tym że w wersji asynchronicznej zamiast typu zwracanego dorzucamy jeden argument typu AsyncCallback<typ_tego_co_zwraca_metoda>.

Jest tu jeszcze nasza klasa wejścia GWT_Hello.java z której powybieram tylko ważniejsze części.

[java]

public class GWT_Hello implements EntryPoint {

////////////////////////////////////////////////////

private final GreetingServiceAsync greetingService = GWT
.create(GreetingService.class);

////////////////////////////////////////////////////

public void onModuleLoad() {/*wyciety kod*/}

////////////////////////////////////////////////////

greetingService.greetServer(textToServer,
new AsyncCallback<String>() {
public void onFailure(Throwable caught) {

}

public void onSuccess(String result) {

}
});

}

[/java]

Klasa jest punktem wejścia więc implementuje EntryPoint stąd też metoda onModuleLoad() - która jest jakby odpowiednikiem main’a. AsyncCallback wymaga zaimplementowania 2 funkcji onFailure() i onSuccess() które zostaną wywołane w zależności od tego czy uda nam się przesłać dane z serwera czy też nie (bo akurat nam się router zrestartował np).  To by było chyba tyle jeśli chodzi o sturtup w GWT. Teraz możemy odpalić nasz projekt klikając na zwykły eclipsowy Run ; ] Projekt włączy nam się w tzw. Hosted mode, czyli mówiąc w duuuużym skrócie uruchamiamy go z klas Javy bez kompilacji do JavaScript co m.in umożliwia bardzo wygodne debugowanie np z eclipse’a. Aby umieścić aplikacje na serwerze trzeba by ją skompilować (np klikając wspomniany na początku nowy przycisk) albo bezpośrednio wrzucić na serwer Google App Engine (3. z nowych przycisków).

Silnik: Wordpress - Theme autorstwa N.Design Studio. Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj








2zł Nordic Gold