2009-06-17 5 views
12

인트라넷에서 DWR을 사용하는 동안 성능이나 보안 문제와 같은 단점이 발생합니까? Direct Web Remoting은 Ajax 요청을 사용하여 js 파일에서 서버에 접속하는 도구입니다.DWR의 단점은 무엇입니까?

답변

8

내가주의해야 할 한 가지 사실은 서버가 (정상적인) 전체 페이지 HTTP 전달을 사용하는 것보다 더 많은 HTTP 요청을받을 가능성이 높다는 것입니다.

설명해 드리겠습니다. 웹 페이지가 AJAX를 사용할 수있게되면 클라이언트는 양식 작성, 페이지 단편 재생성 등에 대한 HTTP 요청을 더 많이 생성하게됩니다. 개발자가 AJAX에 열중 한 시나리오를 보았고 웹 페이지를 크게 동적 인 문서. 그 결과 사용자 만족도는 좋아졌지만 모든 요청이 서버에 영향을 미치기 때문에 확장 성과 지연 문제가 발생합니다.

주 - DWR과 관련이 없지만 AJAX 문제입니다. 나는 DWR을 사용했으며 잘 작동한다. 불행히도, 나는 그것이 매우 잘 작동하고 매우 쉽게 작동하여 모든 것이 원격 작업의 후보가된다는 것을 알게되었고, 결국 거대한 개의 작은 요청 수가 발생합니다.

+0

나는이 대답에 동의합니다. 웹 기반 응용 프로그램에서 DWR을 사용했습니다. 이 응용 프로그램은 훌륭한 사용자 경험을 제공하지만 모든 JavaScript 및 httprequest 때문에 응용 프로그램이 빠르게 작동하지 않는다고 생각합니다. – Michel

2

저는 DWR을 사용하여 프로젝트를 진행했습니다. 정말 멋진 도구였습니다.

나는 개발의 속도에 대해 확신하지 못했습니다. 그들은 on the development log이라는 게시물을 통해 3.0 버전을 출시하려고했지만 2006 년 여름에 가장 안정적인 버전 인 2.0이 출시되었습니다. 지원 관점에서 볼 때 조금 걱정됩니다 - 특히 버그가 수정되었습니다.

2

내가 경험 한 주요 문제는 DWR 호출을 통해 작업의 대부분이 수행되는 시스템에서 부하 테스트를 스크립팅하려는 것입니다. 호출 형식은 매개 변수 변경으로 많은 URL을 회신하는 것과 비교할 때 복제하기가 어렵습니다.

여전히 DWR은 훌륭한 프레임 워크이며 Javascript -> Java RPC를 쉽게 구현할 수 있습니다.

0

DWR은 사이트에 아약스 호출이 많이있을 때 유용한 도구입니다. DWR의 RPC 호출을 만드는

각 페이지는 포함해야합니다 :

가) 호출에 대응하는 인터페이스 파일이 만들어지고. 및 b) 이러한 호출을 가능하게하는 dwr 엔진 코드가 포함 된 dwr과 함께 번들 된 js 파일. 예를 들어 <script src="/dwr/engine.js" ></script>

웹 응용 프로그램을 최적화하는 동안 자주 사용되는 기술 중 하나는 서버에서 리소스 (예 : js 파일)가 변경되지 않은 경우 가능한 한 브라우저 캐시를 사용하는 것입니다.

engine.js는 dwr을 최신 버전으로 업그레이드하지 않는 이상 변경되지 않습니다. 그러나 기본적으로 engine.js는 웹 서버에서 제공하는 정적 파일이 아닙니다. dwr 도구 itsef의 일부로 번들로 제공되며 dwr 컨트롤러/서블릿에서 제공합니다.이 기능은 클라이언트 측 캐싱을 지원하지 않습니다.

따라서 웹 서버의 문서 루트 아래에 engine.js를 저장하고 웹 서버가이를 정적 파일로 제공하도록하는 것이 좋습니다.

+0

DWR 사이트에서 engine.js 캐싱에 대한 추가 정보 : http://directwebremoting.org/dwr/browser/engine/static.html – Jonik

1

현재 DWR 3.x에서 누락 된 기능 중 하나는 모든 사용자가주의해야한다는 것입니다. Bean의 인스턴스가 NULL 값 속성을 가질 때 해당 속성은 여전히 ​​JSON에 주입되며 이러한 중복 데이터는 공연.

속성의 값이 NULL 인 경우 대개 프런트 엔드로 보내면 안됩니다. 문제의

세부 사항 : 다른 솔루션들 http://dwr.2114559.n2.nabble.com/Creating-Custom-bean-converter-td6178318.html

0

가장 큰 차이는 개체 (마샬링) 전송은 객체 참조입니다. 예를 들어

, 당신이 나무를 전송하는 데 사용하는 경우 :

| -B

| 목록에서 -C

{A, B, C}

B.parent는 C.parent가

다음은 일이다 = Javascrit에서 동일한 객체! 당신이 순환 종속성과 개체의 많은 복잡한 구조가있는 경우 나쁜 측면에서

는, • < -B, B < -C, C < -B, C < .A을 ...이 충돌 할 수있다.

어쨌든, 복잡한 그래프를 그릴 수 있도록 수천 개의 개체를 단일 HTML 페이지로 전송하기 위해 제작중인 수백 개의 회사에서 사용하는 실제 프로젝트에서 사용하고 있으며 성능이 뛰어납니다.

관련 문제