Salut,
Le fait d'utiliser une implémentation précise à la place d'une interface (ex: ArrayList à la place de List) permet de réduire le nombre de type supporté par RPC.
En effet lorsque tu utilises un type via RPC, GWT va automatiquement compiler les classes filles (avec le code de conversion RPC) :
Ainsi pour List tu auras :
- java.util.ArrayList
- java.util.Arrays$ArrayList
- java.util.Collections$EmptyList
- java.util.Collections$SingletonList
- java.util.LinkedList
- java.util.Vector
- java.util.Stack
Utiliser le type précis est un peu moins propre et moins souple, mais permet d'éviter un peu de lourdeur.
A noter que tu peux également utiliser la propriété "rpc.blacklist" dans ton .gwt.xml pour déclarer les types à ne pas compiler pour le RPC.
Perso j'utilise ceci :
1 2 3
| <extend-configuration-property name="rpc.blacklist" value="-java.util.Stack"/>
<extend-configuration-property name="rpc.blacklist" value="-java.util.Vector"/>
<extend-configuration-property name="rpc.blacklist" value="-java.sql.*"/> |
Tu peux facilement voir les classes concernées via le fichier *.gwt.rpc généré par la compilation.
Sinon outre l'obfuscation, tu peux aussi utiliser le paramètre -optimize 9.
Seon ton besoin tu peux aussi utiliser -nocheckAssertions (pour virer les assert), -XnoclassMetadata (qui remplace le nom des classes par une chaine courte style "C1234") et -XnocheckCasts (qui vire toutes les checks des casts - du coup plus de ClassCastException mais des erreurs Javascript "étrange").
Un autre gros facteur concerne le mode du stacktrace.
Tu peux définir cela dans ton .gwt.xml via la propriété "compiler.stackMode" :
<set-property name="compiler.stackMode" value="native"/>
Elle peut prendre 3 valeurs :
- "native" : GWT gérera le stacktrace selon le navigateur, pour des résultats variables mais une application assez légère légère.
Toutefois certains "vieux" navigateurs renvoient un peu n'importe quoi... - "strip" : GWT supprimera le stacktrace, ce qui permet de générer une application encore plus légère (mais là on n'a plus aucune info si ce n'est le message de l'exception).
- "emulated" : GWT émulera un stacktrace similaire à ce que l'on peut retrouver dans une application Java, mais cela implique un code un peu plus imposant.
Enfin si ton appli est bien séparé en plusieurs parties, tu peux utiliser le code-splitting pour découper ton appli en plusieurs parties (avec GWT.runAsync()). Cela ne réduira pas la taille totale, mais cela permettra de démarrer l'appli sans tout charger...
a++
Partager