2009-06-17 16 views
12

Al usar DWR en una intranet, ¿se producirán desventajas como el rendimiento o problemas de seguridad? La comunicación remota directa es una herramienta que utiliza la solicitud Ajax para contactar un servidor desde un archivo js.¿Cuál es la desventaja de DWR?

Respuesta

8

Una cosa que debería tener en cuenta es que su servidor probablemente reciba más solicitudes de HTTP que si tuviera la entrega de HTTP de página completa (normal).

Déjame explicarte. Cuando su página web está habilitada para AJAX, sus clientes terminarán creando más solicitudes HTTP para (por ejemplo) llenado de formularios, regeneración de fragmentos de página, etc. He visto escenarios donde los desarrolladores se volvieron locos por AJAX y convirtieron la página web en una documento en gran medida dinámico. Esto resulta en una excelente experiencia de usuario (si se hace bien), pero cada solicitud da como resultado un golpe al servidor, lo que genera problemas de latencia y escalabilidad.

Nota: esto no es particular de DWR, pero es un problema de AJAX. He usado DWR, y funciona muy bien. Desafortunadamente, encontré que funcionó tan bien, y tan fácilmente, que todo se convierte en un candidato para el uso remoto, y puede terminar con números enormes de de solicitudes pequeñas.

+0

Estoy de acuerdo con esta respuesta. Utilicé DWR en una aplicación basada en web. La aplicación ofrece una excelente experiencia de usuario, pero creo que la aplicación no funciona rápido, debido a todo el JavaScript y la httprequest. – Michel

2

Trabajé en un proyecto con DWR, una herramienta muy buena.

Sin embargo, no estoy convencido del ritmo del desarrollo. Sí publicaron on the development log que están trabajando para sacar la 3.0, pero la última versión estable - 2.0 - salió en el verano de 2006. Es un poco preocupante desde el punto de vista del soporte - especialmente las correcciones de errores.

2

Problema principal que he experimentado es intentar guiar una prueba de carga en un sistema donde la mayor parte del trabajo se realiza a través de llamadas DWR. El formato de las llamadas es difícil de replicar cuando se compara con solo responder un montón de URL con parámetros cambiantes.

Still DWR es un marco excelente y hace que la implementación de Javascript -> Java RPC sea bastante fácil.

0

DWR es una gran herramienta cuando su sitio tiene muchas llamadas ajax.

Cada página que hace llamadas DWR RPC debe incluir:

a) un archivo de interfaz correspondiente a las llamadas que se hicieron. y b) un archivo js incluido con dwr que contiene el código del motor dwr que hace que estas llamadas sean posibles. por ej. <script src="/dwr/engine.js" ></script>

Una técnica que se utiliza con frecuencia al optimizar aplicaciones web es utilizar la memoria caché del navegador tanto como sea posible cuando un recurso (como un archivo js) no ha cambiado en un servidor.

engine.js es algo que nunca cambiará a menos que actualice su dwr a una versión más nueva. Pero, de forma predeterminada, engine.js no es un archivo estático servido por su servidor web. se incluye como parte de la herramienta de escritura itsef y es servida por el controlador/servlet dwr. Esto no ayuda al almacenamiento en caché del lado del cliente.

Por lo tanto, es beneficioso guardar engine.js en la raíz del documento de su servidor web y dejar que el servidor web lo sirva como un archivo estático.

+0

Más información sobre el almacenamiento en caché de engine.js en el sitio de DWR: http://directwebremoting.org/dwr/browser/engine/static.html – Jonik

1

Una característica que falta en el DWR actual 3.x de que cualquier usuario debe tener buen cuidado es que cuando una instancia de un bean tiene propiedades de valor NULL, esas propiedades se seguirán inyectando al JSON y estos datos redundantes sí afectarán al actuación.

Cuando una propiedad tiene el valor NULL, por lo general no se debe enviar a frontend.

detalles del problema: http://dwr.2114559.n2.nabble.com/Creating-Custom-bean-converter-td6178318.html

0

La mayor diferencia entre otras soluciones para transferir objetos (cálculo de referencias) es referencias a objetos.

Por ejemplo, si se utiliza para transferir un árbol:

Un

| -B

| -C

en una lista {A, B, C}:

B.parent = A C.parent = A

entonces A es ésimo ¡El mismo objeto en Javascrit!

En la parte negativa, si tiene estructuras complejas con dependencias circulares y gran cantidad de objetos: Un < -B, -C < B, C < -B, C .A <, ... podría bloquearse.

De todos modos, lo uso en un proyecto real utilizado por muchos cientos de empresas en producción para transferir miles de objetos a una sola página html con el fin de dibujar un gráfico complejo y funciona muy bien con un buen rendimiento.

Cuestiones relacionadas