Я пытался сократить время, необходимое для завершения сборки муравья. Большую часть времени сборки занимает компилятор GWT.
Следующий сценарий ant написан на основе строк сценариев, найденных в официальных примерах GWT. Обратите внимание, как компилятору передаются два модуля GWT. Когда вы запускаете этот сценарий, компилятор GWT последовательно компилирует два модуля.
<target name="gwtc" description="GWT compile to JavaScript">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
........
........
<arg value="com.af.gwtmodules.dashboard.Dashboard" />
<arg value="com.af.gwtmodules.administration.Administration" />
<arg line=" -localWorkers 16" />
</java>
</target>
Я изменил задачу, чтобы запустить 2 задачи компиляции параллельно, и в каждой задаче я передаю компилятору только один модуль GWT.
<target name="gwtc" description="GWT compile to JavaScript">
<parallel threadsperprocessor="16">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
........
........
<arg value="com.af.gwtmodules.dashboard.Dashboard" />
<arg line=" -localWorkers 16" />
</java>
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
........
........
<arg value="com.af.gwtmodules.administration.Administration" />
<arg line=" -localWorkers 16" />
</java>
</parallel>
</target>
Это действительно работает быстрее, как и ожидалось. Однако мне интересно, сможет ли компилятор GWT лучше справиться с оптимизацией кода, если ему будут предоставлены все модули сразу, а не каждый модуль по отдельности. Например, два модуля используют много общего кода. Таким образом, если компилятор может видеть всю базу кода сразу, он может найти больше избыточного кода. Теоретически можно создать один JS-артефакт для общего кода и отдельные JS-артефакты для нестандартного кода. Это приведет к сокращению времени загрузки для пользователя, который обращается к обоим модулям, поскольку общий артефакт JS будет загружен только один раз.
Насколько я понимаю, модули GWT независимы, поэтому межмодульной оптимизации не будет. Но тот факт, что компилятор GWT внутренне не распараллеливает это, заставляет меня думать, что могут быть какие-то межмодульные оптимизации или другие разветвления, из-за которых инженеры Google решили не распараллеливать его сверх предела.
Я хотел бы знать, влияет ли распараллеливание компиляции так, как я это сделал, на качество сгенерированного кода.