카테고리 보관물: Java

Java

gwt 컴파일러의 속도를 높이려면 어떻게해야합니까? 변경하기 시작할 것입니다. 이는 나중에 GWT

우리는 프로젝트에서 GWT를 더 많이 사용하기 시작했으며 GWT 컴파일러의 성능은 점점 더 성 가실 것입니다.

우리는 호스팅 모드 브라우저에 대한 강조를 포함하여 문제를 완화하기 위해 작업 관행을 변경하기 시작할 것입니다. 이는 나중에 GWT 컴파일러를 실행해야 할 필요성을 지연 시키지만 특히 자체 위험을 초래합니다. 우리가 원하는 것보다 훨씬 늦을 때까지 실제 브라우저에서 문제를 발견하지 못했습니다.

이상적으로, 우리는 GWT 컴파일러 자체를 더 빠르게 만들고 싶습니다. 상당히 작은 응용 프로그램을 컴파일하는 데 1 분이 걸립니다. 그러나 우리는 상당히 순진한 방식으로 컴파일을 사용하므로 빠르고 쉽게 얻을 수 있기를 바랍니다.

현재 256m 최대 힙과 많은 스택 공간을 사용하여 Ant Ant 대상에서 Java 애플리케이션으로 com.google.gwt.dev.Compiler를 호출하고 있습니다. 컴파일러는 fork = true 및 최신 Java 6 JRE를 사용하여 Ant에서 시작하여 Java6의 향상된 성능을 활용하려고 시도합니다. 우리는 메인 컨트롤러 클래스를 응용 프로그램 클래스 경로와 함께 컴파일러에 전달합니다.

여분의 속도를 얻기 위해 다른 무엇을 할 수 있습니까? 해야 할 일을 발견하는 데 더 적은 시간을 할애하여 더 많은 정보를 제공 할 수 있습니까?

하나의 브라우저에서만 컴파일하도록 지시 할 수는 있지만 다중 브라우저 테스트를 수행해야하므로 실제로는 실용적이지 않습니다.

이 시점에서 모든 제안을 환영합니다.



답변

불편한 진실부터 시작합시다. GWT 컴파일러 성능은 정말 대단합니다. 여기저기서 해킹을 사용할 수 있지만 성능이 크게 향상되지는 않습니다.

당신이 할 수있는 좋은 성능 해킹은 다음 줄을 삽입하여 특정 브라우저 만 컴파일하는 것입니다 gwt.xml.

<define-property name="user.agent" values="ie6,gecko,gecko1_8"></define-property>

또는 gwt 2.x 구문으로, 하나의 브라우저에서만 :

<set-property name="user.agent" value="gecko1_8"/>

예를 들어, 이것은 IE와 FF에 대해서만 애플리케이션을 컴파일합니다. 테스트에 특정 브라우저 만 사용하고 있다는 것을 알고 있다면이 작은 핵을 사용할 수 있습니다.

다른 옵션 : 여러 로케일을 사용하고 테스트를 위해 하나만 사용하는 경우 GWT가 기본 로케일을 사용하도록 주석을 모두 작성할 수 있으므로 컴파일 시간에서 추가 오버 헤드가 줄어 듭니다.

결론 : 컴파일러 성능이 크게 향상되지는 않지만 몇 번의 휴식을 취하면 여기저기서 몇 분을 줄일 수 있습니다.


답변

-localWorkers 플래그와 함께 GWT 컴파일러를 실행하면 컴파일러는 여러 순열을 병렬로 컴파일합니다. 이를 통해 멀티 코어 머신의 모든 코어를 사용할 수 있습니다. 예를 들어 -localWorkers 2는 두 개의 순열을 병렬로 컴파일하도록 컴파일러에 지시합니다. 크기 차이의 차이는 얻지 못하지만 (컴파일러의 모든 것이 병렬화 가능하지는 않지만) 여러 순열을 컴파일하는 경우 여전히 주목할만한 속도 향상입니다.

트렁크 버전의 GWT를 사용하려는 경우 모든 브라우저에 대해 호스팅 된 모드를 사용할 수 있으므로 (호스트 된 프로세스 모드 제외) 호스팅 된 모드 의 현재 문제를 대부분 완화 할 수 있습니다. 컴파일은 크기가 더 빠를 수 없으므로 GWT가 가고있는 곳 인 것처럼 보입니다. 항상 호스트 모드로 개발하십시오.


답변

이 항목은 상당히 오래되었지만 대부분은 이미 알고 있지만 GWT 2.x에는 최적화를 건너 뛰어 컴파일 속도를 높이는 새로운 컴파일 플래그가 포함되어 있다고 언급 할 가치가 있다고 생각합니다. 그런 식으로 컴파일 된 JavaScript를 배포해서는 안되지만 비 프로덕션 연속 빌드 중에는 시간을 절약 할 수 있습니다.

-draftCompile 플래그를 GWT 컴파일러 라인에 포함 시키십시오.


답변

설정할 수 있는 user.agent 값 목록은 다음과 같습니다 .

(크롬에 대한 순열 만 생성하도록 설정해야 할 것을 검색 할 때 여기에 계속 끝나기 때문에 여기에 추가하십시오. 대답은 다음과 같습니다. <set-property name="user.agent" value="safari"/>)


답변

최신 버전의 GWT (2.3 또는 2.4로 시작)에서 추가 할 수 있습니다

<collapse-all-properties />

개발 목적으로 gwt.xml에 추가하십시오. 그러면 GWT 컴파일러에게 모든 로케일과 브라우저를 포함하는 단일 순열을 작성하도록 지시합니다. 따라서 여전히 모든 브라우저와 언어에서 테스트 할 수 있지만 여전히 단일 순열 만 컴파일하고 있습니다


답변

프로덕션 용 빌드에 하나의 옵션을 추가 할 수 있습니다.

-localWorkers 8– 여기서 8은 순열을 계산하는 동시 스레드 수입니다. 이 번호를보다 편리한 번호로 조정하기 만하면됩니다. GWT 컴파일 성능을 참조하십시오 (Dennis Ich 의견 덕분에).

테스트 환경으로 컴파일하는 경우 다음을 사용할 수도 있습니다.

-draftCompile 더 빠르지 만 최적화되지 않은 컴파일을 가능하게합니다.

-optimize 0 코드를 최적화하지 않는 (9는 최대 최적화 값입니다)

빌드 및 호스트 모드 성능을 두 배 이상 향상시킨 또 다른 사항은 SSD 디스크를 사용하는 것입니다 (현재 호스트 모드는 매력처럼 작동 함). 저렴한 솔루션은 아니지만 GWT 사용량과 시간 비용에 따라 그만한 가치가 있습니다!

이것이 당신에게 도움이되기를 바랍니다!


답변

GWT 컴파일러는 많은 코드 분석을 수행하므로 속도를 높이기가 어려울 수 있습니다. Google IO 2008 세션은 GWT가 수행하는 작업과 시간이 오래 걸리는 이유를 알려줍니다.

내 권장 사항은 개발을 위해 가능한 한 많이 호스트 모드를 사용하고 테스트를 원할 때만 컴파일하는 것입니다. 이것은 이미 온 솔루션처럼 들리지만 기본적으로 호스팅 모드가있는 이유입니다 (잘, 그리고 디버깅).

GWT 컴파일 속도를 높일 수 있지만 GWT가 기본적으로하는 5 가지가 아닌 일부 브라우저에서만 컴파일 할 수 있습니다. 호스트 모드를 사용하려면 적어도 두 개의 브라우저를 컴파일해야합니다. 단일 브라우저로 컴파일하면 브라우저 감지 코드가 최적화되어 호스트 모드가 더 이상 작동하지 않습니다.

더 적은 수의 브라우저를 위해 컴파일을 구성하는 쉬운 방법은 기본 모듈에서 상속되는 두 번째 모듈을 만드는 것입니다.

<module rename-to="myproject">
  <inherits name="com.mycompany.MyProject"/>
  <!-- Compile for IE and Chrome -->
  <!-- If you compile for only one browser, the browser detection javascript
       is optimised away and then Hosted Mode doesn't work -->
  <set-property name="user.agent" value="ie6,safari"/>
</module>

경우 rename-to속성이 같은 설정은 전체 컴파일을 한 것처럼 다음 출력 파일은 동일합니다