Wir beginnen, GWT in unseren Projekten stärker zu nutzen, und die Leistung des GWT-Compilers wird zunehmend ärgerlich.
Wir werden anfangen, unsere Arbeitspraktiken zu ändern, um das Problem zu mindern, einschließlich einer stärkeren Betonung des Browsers im gehosteten Modus, der die Notwendigkeit verzögert, den GWT-Compiler bis zu einem späteren Zeitpunkt auszuführen, aber dies birgt seine eigenen Risiken, insbesondere die von Probleme mit echten Browsern erst viel später als wir möchten.
Idealerweise möchten wir den GWT-Compiler selbst schneller machen - eine Minute zum Kompilieren einer relativ kleinen Anwendung ist pissig. Wir verwenden die Kompilierung jedoch ziemlich naiv, daher hoffe ich, dass wir schnell und einfach Gewinne erzielen können.
Wir rufen derzeit com.google.gwt.dev.Compiler als Java-Anwendung von Ant Ant Target mit maximal 256 m Heap und viel Stapelspeicher auf. Der Compiler wird von Ant mit fork = true und der neuesten Java 6 JRE gestartet, um die verbesserte Leistung von Java6 zu nutzen. Wir übergeben unsere Hauptcontrollerklasse zusammen mit dem Anwendungsklassenpfad an den Compiler und los geht's.
Was können wir noch tun, um zusätzliche Geschwindigkeit zu erreichen? Können wir ihm mehr Informationen geben, damit er weniger Zeit damit verbringt, herauszufinden, was zu tun ist?
Ich weiß, wir können es nur für einen Browser kompilieren, aber wir müssen Tests mit mehreren Browsern durchführen, das ist also nicht wirklich praktisch.
Alle Vorschläge sind an dieser Stelle willkommen.
quelle
Wenn Sie den GWT-Compiler mit dem Flag -localWorkers ausführen, kompiliert der Compiler mehrere Permutationen parallel. Auf diese Weise können Sie alle Kerne eines Multi-Core-Computers verwenden. Beispiel: -localWorkers 2 weist den Compiler an, zwei Permutationen parallel zu kompilieren. Sie erhalten keine Größenordnungsunterschiede (nicht alles im Compiler ist parallelisierbar), aber es ist immer noch eine spürbare Beschleunigung, wenn Sie mehrere Permutationen kompilieren.
Wenn Sie bereit sind, die Trunk-Version von GWT zu verwenden, können Sie den gehosteten Modus für jeden Browser verwenden ( außer Prozess gehosteter Modus ), wodurch die meisten aktuellen Probleme mit dem gehosteten Modus behoben werden. Das scheint der Punkt zu sein, an dem sich die GWT bewegt - entwickeln Sie sich immer im gehosteten Modus, da Kompilierungen wahrscheinlich nicht schneller werden.
quelle
Obwohl dieser Eintrag ziemlich alt ist und die meisten von Ihnen wahrscheinlich bereits wissen, ist es erwähnenswert, dass GWT 2.x ein neues Kompilierungsflag enthält, das das Kompilieren beschleunigt, indem Optimierungen übersprungen werden. Sie sollten JavaScript, das auf diese Weise kompiliert wurde, definitiv nicht bereitstellen, aber es kann eine Zeitersparnis bei kontinuierlichen Builds ohne Produktion sein.
Fügen Sie einfach das Flag: -draftCompile in Ihre GWT-Compilerzeile ein.
quelle
Hier ist eine Liste der user.agent-Werte, auf die Sie sie festlegen können.
(Addiert man diese hier , weil ich immer endet hier, wenn ich für die Suche , was ich einstellen sollte es nur eine Permutation für Chrom produzieren machen Antwort ist:.
<set-property name="user.agent" value="safari"/>
)quelle
In den neueren Versionen von GWT (ab 2.3 oder 2.4, glaube ich) können Sie auch hinzufügen
zu Entwicklungszwecken in Ihre gwt.xml. Dadurch wird der GWT-Compiler angewiesen, eine einzelne Permutation zu erstellen, die alle Gebietsschemas und Browser abdeckt. Daher können Sie weiterhin in allen Browsern und Sprachen testen, kompilieren jedoch immer noch nur eine einzige Permutation
quelle
Sie können Ihrem Build eine Option für die Produktion hinzufügen:
-localWorkers 8
- Wobei 8 die Anzahl der gleichzeitigen Threads ist, die Permutationen berechnen. Alles, was Sie tun müssen, ist, diese Nummer an die Nummer anzupassen, die für Sie bequemer ist. Siehe GWT-Kompilierungsleistung (dank Dennis Ich-Kommentar).Wenn Sie in die Testumgebung kompilieren, können Sie auch Folgendes verwenden:
-draftCompile
Dies ermöglicht schnellere, aber weniger optimierte Kompilierungen-optimize 0
Dies optimiert Ihren Code nicht (9 ist der maximale Optimierungswert).Eine andere Sache, die die Leistung im Build- und Hosted-Modus mehr als verdoppelte, war die Verwendung einer SSD-Festplatte (jetzt funktioniert der Hosted-Modus wie ein Zauber). Es ist keine billige Lösung, aber je nachdem, wie viel Sie GWT verwenden und wie viel Zeit Sie dafür aufwenden, kann es sich lohnen!
Hoffe das hilft dir!
quelle
Der GWT-Compiler führt eine Menge Code-Analysen durch, daher wird es schwierig sein, diese zu beschleunigen. Diese Sitzung von Google IO 2008 gibt Ihnen eine gute Vorstellung davon, was GWT tut und warum es so lange dauert.
Meine Empfehlung ist, für die Entwicklung den Hosted-Modus so weit wie möglich zu verwenden und dann nur dann zu kompilieren, wenn Sie Ihre Tests durchführen möchten. Das klingt nach der Lösung, zu der Sie bereits gekommen sind, aber im Grunde ist das der Grund, warum der gehostete Modus da ist (nun, das und das Debuggen).
Sie können die GWT-Kompilierung beschleunigen, jedoch nur für einige Browser kompilieren, anstatt für 5 Arten, die GWT standardmäßig ausführt. Wenn Sie den gehosteten Modus verwenden möchten, stellen Sie sicher, dass Sie für mindestens zwei Browser kompilieren. Wenn Sie für einen einzelnen Browser kompilieren, wird der Browsererkennungscode entfernt und der gehostete Modus funktioniert nicht mehr.
Eine einfache Möglichkeit, das Kompilieren für weniger Browser zu konfigurieren, besteht darin, ein zweites Modul zu erstellen, das von Ihrem Hauptmodul erbt:
Wenn das
rename-to
Attribut gleich festgelegt ist, sind die Ausgabedateien dieselben wie bei einer vollständigen Kompilierungquelle
quelle
Für GWT 2.x habe ich das gerade entdeckt, wenn Sie verwenden
Sie können sogar mehr als eine Permutation angeben.
quelle