[java] 가장 큰 GWT 함정? [닫은]

GWT를 사용하여 구현하기로 선택한 프로젝트의 시작 / 중간에 있습니다. 누구도 극복 할 수없는 GWT (및 GWT-EXT)를 사용할 때 큰 함정을 경험 한 적이 있습니까? 성능 관점에서 어떻습니까?

우리가 보거나 들어 본 몇 가지 사항은 다음과 같습니다.

  • Google이 콘텐츠를 색인 할 수 없습니다
  • CSS와 스타일은 일반적으로 약간 색다른 것으로 보입니다.

이 항목들에 대한 추가 피드백도 찾으십시오. 감사!



답변

나는 거대한 GWT 팬이라고 말하면서 시작할 것입니다.하지만 많은 함정이 있지만 대부분 극복 할 수는 없었습니다.

문제 : 프로젝트가 커질수록 컴파일 시간이 길어지고 컴파일 시간이 길어집니다. 나는 20 분 컴파일 보고서에 대해 들었지만 내 평균은 약 1 분입니다.

해결 방법 : 코드를 별도의 모듈로 나누고 개미에게 변경 될 때만 빌드하도록 지시하십시오. 또한 개발하는 동안 하나의 브라우저 만 빌드하면 컴파일 시간을 크게 단축 할 수 있습니다. 이것을 .gwt.xml 파일에 넣으면됩니다 :

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

gecko1_8이 Firefox 2 이상인 경우, 즉 6은 IE 등입니다.


문제 : 호스팅 모드는 매우 느리며 (적어도 OS X에서는) JSP 또는 Rails 페이지와 같은 항목을 편집하고 브라우저에서 새로 고침을 수행 할 때 발생하는 ‘실시간’변경 사항과 거의 일치하지 않습니다.

솔루션 : 호스트 모드에 더 많은 메모리를 줄 수는 있지만 (일반적으로 512M에 해당) 여전히 느립니다 .GWT에 익숙해지면 사용을 중지합니다. 많은 변경 사항을 작성한 다음 하나의 브라우저 (일반적으로 20 초 상당의 컴파일)로 컴파일 한 다음 브라우저에서 새로 고침을 누르십시오.

업데이트 : GWT 2.0 이상에서는 새로운 ‘개발 모드’를 사용하기 때문에 더 이상 문제가되지 않습니다. 기본적으로 브라우저에서 직접 코드를 실행할 수 있으므로 속도 손실이 없으며 파이어 버그 / 검사 등이 가능합니다.

http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM


문제점 : GWT 코드는 Java이며 HTML 페이지를 레이아웃하는 것과는 다른 사고 방식을 가지고있어 HTML 디자인을 작성하여 GWT로 변환하기가 더 어렵습니다.

솔루션 : 다시 한 번 익숙해 지지만 불행히도 HTML 디자인을 GWT 디자인으로 변환하는 것은 HTML 디자인을 JSP 페이지로 변환하는 것보다 항상 느릴 것입니다.


문제 : GWT는 약간의 노력을 기울이고 있지만 아직 주류가 아닙니다. 즉, 팀에 합류하거나 코드를 유지 관리하는 대부분의 개발자는 처음부터 배워야합니다.

솔루션 : GWT가 이륙 할 것인지는 여전히 남아 있지만, 고용인을 통제하는 회사라면 GWT를 알고 있거나 배우고 싶은 사람들을 항상 선택할 수 있습니다.


문제 : GWT는 jquery 또는 일반 자바 스크립트와 비교할 때 망치입니다. JS 파일을 포함하는 것보다 더 많은 설정이 필요합니다.

솔루션 : jquery와 같은 라이브러리를 사용하여 작고 간단한 작업에 적합하십시오. AJAX에서 정말 복잡한 것을 만들거나 RPC 메커니즘을 통해 데이터를 앞뒤로 전달해야하는 경우 GWT를 사용하십시오.


문제 : 때때로 GWT 페이지를 채우려면 페이지가 처음로드 될 때 서버 호출을해야합니다. 필요한 데이터를 가져 오는 동안 사용자가 거기에 앉아 로딩 기호를 보는 것이 성 가실 수 있습니다.

솔루션 : JSP 페이지의 경우 HTML이되기 전에 서버에서 이미 페이지를 렌더링 했으므로 실제로 모든 GWT 호출을 수행 한 후 페이지에 미리로드하여 즉시로드 할 수 있습니다. 자세한 내용은 여기를 참조하십시오.

GWT 호출을 미리 직렬화하여 페이지 로딩 속도를 높입니다.


CSS가 내 위젯을 스타일링하는 데 아무런 문제가 없었습니다. 맞춤형 또는 기타 방식으로 인해 함정이라는 것이 무슨 의미인지 알지 못합니까?

성능에 관해서는, 일단 컴파일 된 GWT 코드가 빠르면 AJAX 호출이 전체 페이지 새로 고침을 수행하는 것보다 거의 항상 작다는 것을 알았습니다.하지만 GWT에 고유하지는 않습니다. JAVA 백엔드는 매우 콤팩트합니다.


답변

우리는 거의 2 년 동안 gwt와 협력 해 왔습니다. 우리는 많은 교훈을 얻었습니다. 우리가 생각하는 것은 다음과 같습니다.

  1. 타사 위젯 라이브러리, 특히 gwt-ext를 사용하지 마십시오. 디버깅, 개발 및 런타임 성능이 저하됩니다. 어떻게되는지 궁금한 점이 있으면 저에게 직접 연락하십시오.

  2. gwt를 사용하여 앱의 동적 부분 만 채우십시오. 따라서 많은 필드와 복잡한 사용자 상호 작용이있는 경우 그러나 함께 제공되는 패널을 사용하지 마십시오. 기존 스톡 디자이너 제공 페이지를 가져 가십시오. 앱의 컨트롤이 포함될 영역을 개척하십시오. 이 컨트롤을 onModuleLoad () 내의 페이지에 연결하십시오. 이렇게하면 디자이너의 표준 페이지를 사용하고 gwt 외부의 모든 스타일을 수행 할 수 있습니다.

  3. 전체 앱을 하나의 표준 페이지로 빌드하지 말고 모든 조각을 동적으로 빌드하십시오. 2 번 항목에서 제안한 내용을 수행해도 어쨌든 발생하지 않습니다. 모든 것을 동적으로 구축하면 성능을 저하시키고 중대형 앱에 많은 양의 메모리를 소비합니다. 또한 내가 제안하는 것을하면 뒤로 버튼이 잘 작동하므로 검색 엔진 색인 등이 있습니다.

다른 논평자들도 좋은 제안을했다. 내가 사용하는 기본 규칙은 표준 웹 페이지를 수행하는 것처럼 페이지를 만드는 것입니다. 그런 다음 역동적이어야하는 조각을 개척하십시오. ID가있는 요소로 교체 한 다음 RootPanel.get( id ).add( widget )해당 영역을 채우는 데 사용하십시오 .


답변

우리가 겪은 함정 :

  • GWT EXT와 같은 것을 사용하면 많은 마일리지를 얻을 수 있지만 JavaScript 라이브러리 위에서 이런 종류의 얇은 베니어를 사용할 때마다 디버깅 기능이 손실됩니다. GWT EXT 테이블 클래스에서 무슨 일이 일어나고 있는지 (IntelliJ 디버거 내부에서) 검사 할 수 없기 때문에 책상에 머리를 두 번 이상 내 밀었습니다 …보실 수있는 것은 JavaScriptObject입니다. 이로 인해 무엇이 잘못되었는지 파악하기가 매우 어렵습니다 …

  • 팀에 CSS를 아는 사람이 없습니다. 내 경험상, 그 사람이 전문가가 아니었다는 것은 문제가되지 않았다. 그는 좋은 실무 지식을 가지고 있고 필요할 때 구글에 대한 올바른 용어를 알고있다.

  • 여러 브라우저에서 디버깅 Out of Process Hosted Mode [ 1 ] [ 2 ] [ 3 ]를 주시하십시오. GWT 1.6에 들어 오길 바랍니다 … 지금은 Hosted 모드로 작업을 끝내고 “Compile / Browse”버튼을 사용해야합니다. 다른 브라우저에서 플레이 할 수 있습니다. 나에게있어 Windows에서 작업한다는 것은 FireFox에서 내 작업을보고 FireBug를 사용하여 조정하고 개선하는 데 도움이된다는 것을 의미합니다.

  • IE6. 다른 IE 6이 어떻게 물건을 렌더링하는지 놀랍습니다. 브라우저에 따라 가장 바깥 쪽 “뷰포트”에 스타일을 적용하여 CSS 규칙을 사용할 수있는 접근 방식을 취했습니다.

    .my-style { /* stuff that works most everywhere */ }
    
    .msie6 .my-style { /* "override" so that styles work on IE 6 */ }

마지막으로, 도움이되는 편집기를 사용하십시오. IntelliJ를 사용합니다 .GWT 스마트가 많이 있습니다. 예를 들어, JRE 에뮬레이션으로 처리되지 않는 클래스를 사용하려고하면 알려줍니다. 위젯의 스타일을 지정하고 해당 스타일을 아직 정의하지 않은 경우 코드가 약간 빨간색으로 변합니다 … 또는 CSS를 볼 때 충돌 속성을 지정했을 때 알려줍니다 단일 규칙. (아직 시도하지는 않았지만 버전 8은 “로컬”및 “비동기”RPC 인터페이스와 구현을 동기화 상태로 유지하는 것과 같이 GWT 지원이 훨씬 우수하다는 것을 알고 있습니다.)


답변

향후 몇 달 내에 출시 될 예정인 GWT 2.0은 논의 된 많은 문제를 해결합니다.

  • 구문과 같은 html / xml을 사용하여 레이아웃 작성
  • 동적 스크립트로드-필수 JS 만 처음에 다운로드됩니다. 나머지는 필요에 따라 다운로드됩니다
  • In-Browser Hosted Mode (브라우저 내 호스팅 모드)-논의 된 호스팅 모드 속도 문제를 처리 할 수 ​​있습니다.
  • “컴파일러 최적화”-더 빠른 컴파일

Google I / O에서 GWT 2.0 미리보기 비디오


답변

“이길 수없는”것이 아니라 기본적인 것에 대한 약간의 고통.

날짜 처리 :

GWT는 더 이상 사용되지 않으므로 java.util.Date클라이언트 측의 날짜를 처리 할 때 예기치 않은 동작이 발생할 수 있습니다. java.util.CalendarGWT는 지원하지 않습니다. 자세한 내용은 여기를 참조하십시오 .

관련 문제 예 :


답변

이미 언급 한 사항에 몇 가지 요점을 추가하겠습니다.

  • 데이터 바인딩 / 검증 GWT는 데이터 바인딩 / 검증 지원을 기본적으로 제공하지는 않지만이 영역에 일부 프로젝트가 등장하기 시작했습니다. 당신은 이것을 많이 쓰는 것을 보게 될 것입니다 :
텍스트 필드 fname, faddress;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • 게으른 로딩. gwt가 클라이언트 측에 있기 때문에 지연 로딩은 실제로 옵션이 아닙니다. RPC와 도메인 객체를 신중하게 설계해야합니다.
    • 필요한 모든 객체 데이터를 보내십시오
    • 모든 데이터를 열심히 가져 오는 것을 피하십시오
    • 또한 프록시 / 직렬화 할 수없는 객체를 보내지 않도록해야합니다. hibernate4gwt 는 이러한 점들에 도움을 줄 수 있습니다.
  • UI 디자인. html보다 자바 (패널, 버튼 등)로 UI를 시각화하는 것이 더 어렵습니다.
  • 역사 지원. GWT는 히스토리 서브 시스템과 함께 제공되지 않으며 멋진 URL이나 상태 전체 북마크를위한 서브 시스템과 함께 제공되지 않습니다. 히스토리 토큰을 지원하지만 시작은 자신의 롤을해야합니다. 이것은 모든 AJAX 툴킷 AFAIK에서 발생합니다.

IMHO, GWT에는이 ‘스레드’에 언급 된 모든 문제에 대해 즉시 지원되는 프레임 워크가 없습니다.


답변

EXT GWT (GXT)를 사용하여 GWT EXT와 혼동하지 않는 프로젝트를 진행하고 있습니다. 차이점은 EXT GWT는 ExtJS를 자바 스크립트 라이브러리로 작성한 회사가 실제로 만든 것입니다. GWT EXT는 ExtJS 라이브러리 주변의 GWT 래퍼입니다. GXT는 기본 GWT입니다.

어쨌든 GXT는 여전히 미숙하고 GWT EXT가 느끼는 견고한 커뮤니티가 부족합니다. 그러나 미래는 GXT의 기본 GWT이며 실제로 ExtJS를 만든 회사가 개발했기 때문에 GXT와 함께합니다. 라이센스가 ExtJS 라이브러리에서 변경되면 GWT EXT가 다소 손상되어 GWT EXT의 개발 속도가 느려집니다.

전반적으로 GWT / GXT는 웹 응용 프로그램 개발을위한 훌륭한 솔루션이라고 생각합니다. 나는 실제로 개발을위한 호스팅 모드를 매우 좋아합니다. 또한 코드를 디버깅 할 수 있다는 이점도 있습니다. JUnit을 사용한 단위 테스트도 매우 견고합니다. 엔터프라이즈 애플리케이션을 테스트하기에 충분하다고 생각되는 훌륭한 JavaScript 단위 테스트 프레임 워크를 아직 보지 못했습니다.

GWT EXT에 대한 자세한 정보 :
http://gwt-ext.com/

EXT GWT (GXT)에 대한 자세한 정보 :
http://extjs.com/products/gxt/