Nous commençons à utiliser de plus en plus GWT dans nos projets, et les performances du compilateur GWT deviennent de plus en plus ennuyeuses.
Nous allons commencer à modifier nos pratiques de travail pour atténuer le problème, notamment en mettant davantage l'accent sur le navigateur en mode hébergé, qui reporte la nécessité d'exécuter le compilateur GWT jusqu'à une date ultérieure, mais cela comporte ses propres risques, en particulier celui de ne pas attraper de problèmes avec de vrais navigateurs jusqu'à bien plus tard que nous le souhaiterions.
Idéalement, nous aimerions rendre le compilateur GWT lui-même plus rapide - une minute pour compiler une application assez petite prend la pisse. Cependant, nous utilisons la compilation de façon assez naïve, donc j'espère que nous pourrons faire des gains rapides et faciles.
Nous invoquons actuellement com.google.gwt.dev.Compiler en tant qu'application java à partir de la cible Ant Ant, avec 256 m de tas maximum 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 principale au compilateur avec le chemin de classe de l'application, et c'est parti.
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 à découvrir quoi faire?
Je sais que nous pouvons lui dire de ne compiler que pour un seul navigateur, mais nous devons faire des tests multi-navigateurs, donc ce n'est pas vraiment pratique.
Toutes les suggestions sont les bienvenues à ce stade.
la source
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 indiquera au compilateur de compiler deux permutations en parallèle. Vous n'obtiendrez pas de différences d'ordre de grandeur (tout n'est pas parallélisable dans le compilateur) mais c'est toujours une accélération notable si vous compilez plusieurs permutations.
Si vous êtes prêt à utiliser la version tronc de GWT, vous pourrez utiliser le mode hébergé pour n'importe quel navigateur ( hors mode hébergé ), ce qui atténue la plupart des problèmes actuels avec le mode hébergé. Cela semble être là où va le GWT - développez toujours avec le mode hébergé, car les compilations ne sont pas susceptibles d'obtenir des amplitudes plus rapidement.
la source
Bien que cette entrée soit assez ancienne et que la plupart d'entre vous le sachent probablement déjà, je pense qu'il vaut la peine de mentionner que GWT 2.x inclut un nouvel indicateur de compilation qui accélère la compilation en ignorant les optimisations. Vous ne devez certainement pas déployer JavaScript compilé de cette façon, mais cela peut vous faire gagner du temps lors des builds continus hors production.
Incluez simplement le drapeau: -draftCompile dans votre ligne de compilateur GWT.
la source
Voici une liste de valeurs user.agent que vous pouvez définir.
( L' ajout de ce ici parce que je continue à se retrouver ici quand je cherche ce que je dois mettre à faire produire seulement une permutation pour le chrome réponse est:.
<set-property name="user.agent" value="safari"/>
)la source
Dans les nouvelles versions de GWT (à partir de 2.3 ou 2.4, je crois), vous pouvez également ajouter
à votre gwt.xml à des fins de développement. Cela indiquera au compilateur GWT de créer une permutation unique qui couvre tous les paramètres régionaux et les navigateurs. Par conséquent, vous pouvez toujours tester dans tous les navigateurs et langues, mais ne compilez toujours qu'une seule permutation
la source
Vous pouvez ajouter une option à votre build pour la production:
-localWorkers 8
- Où 8 est le nombre de threads simultanés qui calculent les permutations. Tout ce que vous avez à faire est d'ajuster ce nombre au nombre qui vous convient le mieux. Voir les performances de la compilation GWT (grâce au commentaire de Dennis Ich).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
qui n'optimise pas votre code (9 est la valeur d'optimisation maximale)Une autre chose qui a plus que doublé les performances de génération et de mode hébergé était l'utilisation d'un disque SSD (maintenant le mode hébergé fonctionne comme un charme). Ce n'est pas une solution bon marché, mais selon la façon dont vous utilisez GWT et le coût de votre temps, cela en vaut la peine!
J'espère que cela vous aide!
la source
Le compilateur GWT fait beaucoup d'analyse de code, il sera donc difficile de l'accélérer. Cette session de Google IO 2008 vous donnera une bonne idée de ce que fait GWT et pourquoi cela prend si longtemps.
Ma recommandation est que le développement utilise le mode hébergé autant que possible et ne compile que lorsque vous souhaitez effectuer vos tests. Cela ressemble à la solution que vous avez déjà trouvée, mais c'est essentiellement la raison pour laquelle le mode hébergé est là (enfin, cela et le débogage).
Vous pouvez accélérer la compilation de GWT, mais uniquement pour certains navigateurs, plutôt que 5 types que GWT fait par défaut. Si vous souhaitez utiliser le mode hébergé, assurez-vous de compiler pour au moins deux navigateurs; si vous compilez pour un seul navigateur, le code de détection du navigateur est optimisé et le mode hébergé ne fonctionne plus.
Un moyen simple de configurer la compilation pour moins de navigateurs est de créer un deuxième module qui hérite de votre module principal:
Si l'
rename-to
attribut est défini de la même manière, les fichiers de sortie seront les mêmes que si vous avez effectué une compilation complètela source
la source
Pour GWT 2.x, je viens de découvrir que si vous utilisez
Vous pouvez même spécifier plusieurs permutations.
la source