개미 빌드가 완료되는 데 걸리는 시간을 줄이려고했습니다. 대부분의 빌드 타임은 GWT 컴파일러에 의해 취해진 다.GWT 병렬 컴파일 대 순차 컴파일
다음 개미 스크립트는 공식 GWT 예제에있는 스크립트 행에 작성되어 있습니다. 2 개의 GWT 모듈이 어떻게 Complier에 전달되는지 주목하십시오. 이 스크립트를 실행하면 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 엔지니어가 제한을 넘어서 병렬 처리를 결정하기 때문에 일부 모듈 간 최적화 또는 기타 파급 효과가있을 수 있다고 생각합니다.
필자는 컴파일 방식을 병렬 처리하면 생성 된 코드의 품질에 어떤 영향을 미치는지 알고 싶습니다.
. 이 작업은 CPU 집약적이지만 컴퓨터의 모든 CPU 스레드를 사용하지는 않습니다. 몇 개의 코어/스레드가 최대 유휴 동안 다른 유휴 상태로 남아 있습니다. 그래서 더 많은 작업을 병렬로 실행하면 두 번째 경우의 컴파일 시간이 단축됩니다. 링크를 가져 주셔서 감사합니다. 그렇습니다. 각 경우에 출력 파일의 CRC를 비교해야합니다. – Dojo
저는 8 localWorkers 이상의 개선점을 얻지 못했습니다. 32GB RAM을 갖춘 매우 강력한 컴퓨터가 있습니다. –
개선 사항은 컴파일러 인수에 정의 된 로컬 작업자 때문이 아니라 Ant가 두 개의 컴파일러 작업을 병렬로 실행하기 때문입니다. 이 시스템은 16 개의 CPU 트레드가있는 이중 쿼드 제온 시스템에 있습니다. – Dojo