2013-07-30 7 views
1

클라이언트의 GWT 코드에서 중복 컴파일 및 js를 제거하는 방법을 찾으려고합니다. 문제는 여러 개의 EntryPoint 사이트와 모든 모듈에 대해 컴파일 된 대규모 모델이 있다는 것입니다. 우리는 각각 30 개의 GWT 모듈과 엔트리 포인트를 사용하여 앱의 전체 모델 패키지를 개별적으로 컴파일하고 있습니다. 내 8 코어 몬스터에서 GWT가이 짐승을 모으는 데 약 15 분이 걸립니다. 그리고 예, 컴파일은 평행을 이루고 모든 코어를 사용합니다 (우분투에서 마우스를 움직일 수는 없습니다 :))중복 코드가없는 다중 모듈

아키텍처를 단일 모듈로 변경하는 것은 실제로는 불가능하다고 생각합니다. 모듈간에 상속을 공유 할 수있는 방법이 없습니까? 모듈은 반드시 그다지 큰 것은 아니지만 문제는 다시 모든 상속이 각 모듈에 대해 중복으로 컴파일된다는 것입니다. 물론 모든 페이지는 기본적으로 전체 모델 -js를 반복해서로드해야하므로 최종 사용자에게는 물론 부정적인 영향을 미칩니다.

http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml

에 따르면

제안은 여전히 ​​하나 개의 거대한 모 놀리 식 모듈을 만드는 것 같다. 더 좋은 방법이 없을까요?

모든 팁을 높이 평가합니다!

답변

1

GWT 문서에서 언급했듯이 중복 코드를 피하는 문제에 직면 한 GWT 메커니즘은 애플리케이션에있는 모든 하위 모듈을 포함하는 수퍼 gwt 모듈의 모든 모듈을 병합합니다.

웹 사이트에서 다른 페이지 나 기능에 대한 모듈을 생성한다고 가정합니다. 따라서 고유 한 모듈을 사용하면 페이지별로 적절한 애플리케이션 코드를 실행하는 메커니즘이 필요합니다. URL 또는 뭔가.

code-splitting을 사용하면 모듈이 RunAsyncCallbacks가 아닌 EntryPoints가되고 각 모듈이 비동기 적으로로드되는 하나의 js 조각으로 컴파일됩니다.

모든 페이지에 동일한 자바 스크립트 조각을 포함하므로 페이지에 따라 다른 조각이로드됩니다. 이 솔루션의

장점은 많다 : 당신은 하나 개의 컴파일 과정을

  • . 오랜 시간이 걸릴 수 있지만 중복 코드가 한 번 컴파일되므로 모든 모듈을 개별적으로 컴파일하는 것보다 훨씬 적은 시간이 소요됩니다.
  • 서로 다른 .gwt.xml을 유지할 수 있습니다. 하나는 고유 한 EntryPoint로 개별 모듈을 계속 개발하고 다른 모듈은 수퍼 모듈에 상속 될 EntryPoint없이 유지할 수 있습니다.
  • 일단 컴파일되면 첫 번째 조각 (모든 앱에서 공유 됨)이 매우 작아서 한 번 캐시되므로 모든 앱이 매우 빠르게로드됩니다.
  • 모듈에서 공유하는 많은 코드 (gwt-core, jre 등)는 첫 번째 조각으로 이동하여 모든 모듈에서 공유 할 수 있으므로 각 앱의 최종 다운로드 크기가 줄어 듭니다.
  • gwt 컴파일러는 코드를 분할하고, 공유 코드를 중간 모듈에 병합하고, 필요할 때 조각을 비동기 적으로로드하는 메서드를 추가하는 등의 기본 솔루션입니다.
  • Java 생태계는 모듈 형 응용 프로그램 (종속성, 메이븐 등)을 용이하게합니다.

그렇지 않으면 모듈을 계속 만들고 싶다면 모듈을 컴파일 할 때마다 gwt 컴파일러를 한 번씩 실행하면됩니다. 하지만 젠킨스 (Jenkins)와 같은 지속적인 통합 클러스터를 사용하거나 병렬로 작업을 실행하거나 더 많은 무차별 대입 (메모리, CPU 등)을 사용하여 컴파일 시간을 향상시킬 수 있습니다.

1

GWT는 각 모듈을 하나의 커다란 JavaScript 파일로 컴파일하고 모듈 전체의 모든 정보를 기반으로 모든 것을 최적화합니다. 따라서 각 모듈에 필요한 모든 것을 컴파일해야합니다.

한 가지 해결책은 하나의 큰 모듈을 만드는 것이지만 모듈 구조와 비슷한 code splitting을 사용하는 것일 수 있습니다. 하나의 매우 큰 모 놀리 식 JavaScript 파일을 얻지는 못하지만 필요에 따라 '모듈'이로드됩니다.

사용 가능한 모든 가능한 코어를 사용하는 대신 현지 근무자가 적게 컴파일을 시도 했습니까? 저는 localworker가 4로 설정된 최상의 결과를 보았습니다 (심지어 6 코어 머신에서도).