2013-01-16 3 views
1

RequestFactory 및 GWT의 성능과 관련하여 질문이 있습니다. 약 1,000 개의 EntityProxies를 반환하는 8 개의 필드가있는 도메인 엔터티가 있습니다. 요청 발사와 응답 사이의 시간은 약 20 초입니다. 나는 똑같은 일을하지만 10 개의 EntityProxies를 반환하고 그 시간은 거의 동일합니다.GWT RequestFactory 성능

개발 모드에서 작업 중이거나 웹에 코드를 릴리스 할 때 시간이 동일 할 것인가?

성능을 향상시킬 방법이 있습니까? , 나는 단지 데이터를 읽으므로 읽거나 쓰지 않는 것이 해결책 일 수 있습니까?

나는 내 문제와 유사한 뭔가이 게시물을 읽어

GWT Requestfactory performance suggestions

덕분에 많이.

PD : 한 가지 해결책은 서버에서 XML을 만들고 클라이언트에게 보내고 거기에있는 개체를 다시 만들 수 있다는 것을 읽었습니다.이 작업을 수행하지 않으려 고합니다. 앱.

답변

0

GWT의 성능 프로파일 링 및 고정 문제는 까다 롭습니다. GWT 호스팅 모드에서 모든 프로파일 링을 피하십시오. 그들은 아무런 쓸모가 없다.

프로파일은 WEB 모드에서만 프로파일해야합니다.

GWT RequestFactory는 GWT RPC 및 GWT JSON 등보다 느립니다.이 기능은 델타를 계산하고 저장시 서버에 소량의 정보 만 보내는 GWT RF 기능과 균형을 이룹니다.

1000 개의 프록시가로드되지 않도록 응용 프로그램 디자인을 다시 확인해야합니다. RF는 응용 프로그램과 같은 "양식"의 의미입니다. 1000 개의 프록시가 필요한 유일한 이유는 Grid 디스플레이입니다. 이 시나리오에서는 페이지 매김 된 비동기 격자를 사용할 수 있습니다.

0

당신은 다음 단계에 소요되는 시간이 얼마나 알아 내기 위해 귀하의 응용 프로그램을 프로파일해야 데이터베이스 (서버)에서 검색

  1. 엔티티 :이 두 번째 레벨 캐시를 사용하여 개선하고 최적화 할 수 있습니다 쿼리
  2. 엔터티를 JSON (서버)에 serialize : RequestFactoryAutoBean은 각각 반사에 의존하기 때문에 오버 헤드가 있습니다. 클라이언트에 표시 할 엔터티 만 전송하려고 할 수 있습니다. 크게 대기 시간을 줄여 또 다른 최적화는 EntitiyLocatorisLive 메소드를 오버라이드 (override)하고 데이터 (선)을 tranmit하는 서버에서 클라이언트로 사실
  3. HTTP 요청을 반환하는 것입니다 : 당신은을 줄이기 위해 gzip 압축을 사용하는 방법에 대해 생각할 수있는 전송해야하는 데이터의 양 (전선을 통해 많은 수의 물체를 보내는 경우 중요).
  4. 클라이언트 (클라이언트)에서 직렬화 해제 : 이것은 매우 빠릅니다. AutoBean 직렬화가 JSON을 직렬화하는 가장 빠른 방법 중 하나라는 벤치 마크가있었습니다. 다시 이것은 와이어를 통해 전체 객체 그래프를 전송하지 않으면 도움이됩니다.

성능을 향상시키는 한 가지 방법은 캐싱을 사용하는 것입니다. HTML5 localstorage을 사용하여 클라이언트의 데이터를 캐시 할 수 있습니다. 이는 자주 변경되지 않는 데이터에만 적용됩니다.

1

도움을 주셔서 감사합니다. 요청 팩토리를 사용하여 수천 개의 레코드를 검색하는 것은 실수 였을 것입니다.

나는 처음에이 게시물에 따르면() 메소드의 isLive()을 재정의하고 찾을 수있는 로케이터를 사용 : gwt-requestfactory-performance-suggestions

응답 시간은 약 13 초로 감소했지만, 여전히 너무 높습니다.

하지만 쉽게 해결했습니다. 1000 개 이상의 엔티티를 반환하는 대신 필자는 각 필드에 구분 기호로 연결된 모든 동일한 필드 레코드 (1000+)가있는 새 데이터베이스 테이블을 만들었습니다 (각 db 필드의 길이는 약 10000입니다). 테이블에 레코드가 하나만 있습니다. 약 8 개의 필드가 있습니다. 이 같은

뭔가 :

Field1   |   Field2   |   Field3   

Field1val, Field1val, Field1val; ....... | Field2val; Field2val; Field2val; ...... | Field3val; Field3val; Field3val; ......

RequestFactory를 통해 내 레코드로 1 레코드를 반환하면 속도가 많이 빨라졌습니다! 약 1 초. 클라이언트에서이 큰 String을 파싱하고 그 기간은 약 500ms입니다. 따라서 20 초 정도를 낭비하는 대신 이제는 1-2 초 정도 걸리므로

정보 표시 만하는 방식으로 삽입, 삭제 또는 업데이트 할 필요가 없으므로이 솔루션이 저에게 효과적입니다.

생각 나는이 해결책을 나눌 수있었습니다.

관련 문제