[Java] Comment puis-je accélérer le compilateur gwt?


Answers

Si vous exécutez le compilateur GWT avec l'indicateur -localWorkers, le compilateur compilera plusieurs permutations en parallèle. Cela vous permet d'utiliser tous les cœurs d'une machine multicœur, par exemple -localWorkers 2 demandera au compilateur de compiler deux permutations en parallèle. Vous n'obtiendrez pas d'ordre de différences de grandeurs (tout n'est pas parallélisable dans le compilateur) mais c'est quand même une accélération notable si vous compilez plusieurs permutations.

Si vous souhaitez utiliser la version trunk de GWT, vous pouvez utiliser le mode hébergé pour n'importe quel navigateur ( mode hébergé hors processus ), ce qui évite la plupart des problèmes actuels avec le mode hébergé. Cela semble être le cas de la GWT - toujours développer avec le mode hébergé, car les compilations ne sont pas susceptibles d'atteindre des tailles plus rapides.

Question

Nous commençons à utiliser plus intensément GWT dans nos projets, et les performances du compilateur GWT deviennent de plus en plus ennuyeuses.

Nous allons commencer à modifier nos méthodes de travail pour atténuer le problème, notamment en mettant davantage l'accent sur le navigateur en mode hébergé, ce qui retarde la nécessité d'exécuter le compilateur GWT plus tard, mais cela comporte ses propres risques, en particulier celui de ne pas attraper les problèmes avec les navigateurs réels jusqu'à beaucoup plus tard que nous le voudrions.

Idéalement, nous aimerions que le compilateur GWT lui-même soit plus rapide - une minute pour compiler une application assez petite prend la pisse. Cependant, nous utilisons la compilation si nous sommes assez naïfs, alors j'espère que nous pourrons faire des gains rapides et faciles.

Nous appelons actuellement com.google.gwt.dev.Compiler en tant qu'application java de la cible Ant Ant, avec un tas de 256 m max et beaucoup d'espace de pile. Le compilateur est lancé par Ant en utilisant fork = true et le dernier Java 6 JRE, pour essayer de profiter des performances améliorées de Java6. Nous passons notre classe de contrôleur principal au compilateur avec le chemin de classe de l'application, et ça marche.

Que pouvons-nous faire d'autre pour obtenir une vitesse supplémentaire? Pouvons-nous lui donner plus d'informations pour qu'il passe moins de temps à faire des découvertes?

Je sais que nous pouvons le dire pour ne compiler que pour un seul navigateur, mais nous devons effectuer des tests sur plusieurs navigateurs, ce qui n'est pas vraiment pratique.

Toutes les suggestions sont les bienvenues à ce stade.




  • Divisez votre application en plusieurs modules ou points d'entrée et recompilez-la seulement si nécessaire.
  • Analysez votre application en utilisant la version du tronc - qui fournit l' histoire de votre compilation . Cela peut ou non être pertinent pour le compilateur 1.6 mais il peut indiquer ce qui se passe.



Pour GWT 2.x je viens de découvrir que si vous utilisez

<set-property name="user.agent" value="ie6"/>
<extend-property values="ie8,gecko1_8" name="user.agent"/>

Vous pouvez même spécifier plus d'une permutation.




Vous pouvez ajouter une option à votre build pour la production:

-localWorkers 8 - Où 8 est le nombre de threads concurrents qui calculent les permutations. Tout ce que vous avez à faire est d'ajuster ce nombre au nombre qui vous convient le mieux. Voir la performance de compilation GWT (merci à Dennis Ich commentaire).

Si vous compilez dans l'environnement de test, vous pouvez également utiliser:

-draftCompile qui permet des compilations plus rapides mais moins optimisées

-optimize 0 ce qui n'optimise pas votre code (9 est la valeur d'optimisation maximale)

Une autre chose qui a plus que doublé la performance de construction et de mode hébergé a été l'utilisation d'un disque SSD (maintenant hostedmode fonctionne comme un charme). Ce n'est pas une solution bon marché, mais en fonction de combien vous utilisez GWT et le coût de votre temps, cela peut en valoir la peine!

J'espère que cela vous aide!




Dans les nouvelles versions de GWT (commençant soit 2.3 ou 2.4, je crois), vous pouvez également ajouter

<collapse-all-properties />

à votre gwt.xml à des fins de développement. Cela indiquera au compilateur GWT de créer une seule permutation qui couvre tous les paramètres régionaux et les navigateurs. Par conséquent, vous pouvez toujours tester dans tous les navigateurs et dans toutes les langues, mais ne compilez encore qu'une seule permutation