GWT는 앱을 컴파일하며 변환하지 않습니다. 그것은 일반적으로 클래스 계층 구조 (그리고 당신이 사용하는 GWT 클래스) 다음, 필요로 클래스를 구축하는 자바 스크립트의 prototype
오브젝트를 활용 않지만, 다른 많은 변화한다 :
최적화 :
- 을 유형을 조입니다 - 뭔가를
List
이라고 말하면서 만 ArrayList
일 수 있습니다. 유형 선언을 다시 작성합니다. 이것은 그다지 효과적이지 않지만 다른 단계를 더 잘 수행 할 수 있습니다.
- 정적 메소드 만들기 - ArrayList.add를 오버라이드하지 않으면, 예를 들어 ArrayList.add에있는 모든 호출이 바뀝니다. 정적 호출, 다이나믹 디스패치의 필요성을 방지하며, 최종 JS에서 'this'문자열이 더 짧은 arg 이름으로 대체되도록 허용합니다. 이렇게하면 JS 객체가 예상하는 메소드를 가질 수 없게됩니다.
- 인라인 메서드 - 메서드가 간단하고 충분한 장소에서 호출되는 경우 컴파일러는 메서드가 완전히 호출 된 곳을 모두 알고 있으므로 메서드를 완전히 제거 할 수 있습니다. 이것은 유스 케이스에 직접적인 영향을 미친다.
- 참조되지 않은 필드 제거/인라인 - 필드를 읽지 만 한 번만 쓰면 원래 값이 상수라고 가정합니다. 읽을 수 없다면 할당 할 이유가 없습니다. 컴파일러가 말할 수없는 값은 브라우저에서 js와 시간의 공간을 사용할 필요가 없습니다. 이것은 또한 gwt'd Java를 JS로 취급하는 데 직접적인 영향을줍니다.
다음으로 컴파일러는 필드, 인수 및 형식의 이름을 가능한 한 작게 변경합니다. 필드 또는 인수가 가장 자주 사용되기 때문에 필드 또는 인수가 1 문자를 초과하는 경우는 거의 없습니다. 사용되며 가장 작은 범위를 가지므로 컴파일러가 가장 자주 재사용 할 수 있습니다. 이것 역시 JSON으로 객체를 처리하는 데 영향을 미칩니다.
GWT 개체를 JSON으로 내보낼 수있는 라이브러리는 다른 가정을 통해 그렇게 할 수 있습니다. 컴파일러 예정대로 할 수없는, 당신이 쓰는 JSNI가 상대적으로 최적화되지 않은 나타날 것입니다 -
- JavaScriptObject (JSO)은 실제 자바 객체가 아니라 당신이 마음대로왔다 갔다 캐스트 할 수 있도록 실제로 자바 스크립트 인스턴스를 나타냅니다 외부 라이브러리와 대화하고 있는지 확인하십시오.
- AutoBeans는 JSON을 기록 할 수 있어야하므로 개체를 인코딩하는 특정 메서드가 기록됩니다.컴파일 된 다른 Java와 동일한 규칙이 적용됩니다. 사용되지 않는 코드는 제거 될 수 있으며, 한 방향으로 만 호출되는 코드는 강화되거나 인라인 될 수 있습니다.
- JS를 Java 세부 정보로 컴파일하여 최종 실행 파일로 내보낼 수있는 라이브러리는 크기가 커지지 만 제한된 방식으로 JS와 같은 Java 개체를 처리 할 수 있습니다.
마지막으로 요점은 JSON과 자바 스크립트에 대해 이야기하고 있기 때문입니다. 일부 일반 JS는 JSON으로 쓰는 데 적합하지 않습니다. Date 객체에는 JSON에서 인식하는 일관된 직렬화 방법이 없습니다. 비 트리 개체 그래프를 직렬화 할 수 없습니다
var obj = {};
obj.prop = {};
obj.prop.obj = obj;
Autobeans는이 순환 참조에 대한 검사에 내장 된 와서 나는 JSO 직렬화뿐만 아니라 않는 희망.
감사합니다. 지금 완벽하게 이해합니다. – paul