2010-03-02 27 views
15

Tenemos un cliente gwt, que recibe bastantes datos de nuestros servidores. Lógicamente, quiero almacenar en caché los datos del lado del cliente, evitando que el servidor reciba solicitudes innecesarias.Caché del lado del cliente en GWT

A partir de hoy he dejado que mis modelos manejen el almacenamiento en caché de datos, que no se escala muy bien. También se ha convertido en un problema ya que diferentes desarrolladores en nuestro equipo desarrollan su propia funcionalidad de "caché", que inunda el proyecto con duplicaciones.

Estoy pensando en cómo se podría implementar un "único punto de entrada", que maneja todo el almacenamiento en caché, dejando a los modelos desorientados sobre cómo se maneja el almacenamiento en caché.

¿Alguien tiene alguna experiencia con el almacenamiento en caché del lado del cliente en GWT? ¿Existe un enfoque estándar que pueda implementarse?

Respuesta

10

Sugiero que busque en gwt-presenter y CachingDispatchAsync. Proporciona un único punto de entrada para ejecutar comandos remotos y, por lo tanto, es una oportunidad perfecta para el almacenamiento en caché.

A recent blog post describe un posible enfoque.

6

Es posible que desee echar un vistazo al patrón de comando; Ray Ryan realizó una charla en Google IO sobre las mejores prácticas en GWT, aquí hay una transcripción: http://extgwt-mvp4g-gae.blogspot.com/2009/10/gwt-app-architecture-best-practices.html

Propone el uso del Patrón de Comando usando los objetos de Acción y Respuesta/Resultado que entran y salen del servidor proxy del servicio. Estos son objetos excelentes para encapsular cualquier almacenamiento en caché que desee realizar en el cliente.

Aquí hay un extracto: "Tengo una buena unidad monetaria para implementar políticas de caché. Puede ser que cada vez que veo la misma solicitud GET dos veces, guarde en caché la respuesta que obtuve la última vez y la devuelva a yo mismo de inmediato. No me moleste con un viaje al lado del servidor ".

En un proyecto bastante grande, tomé otra dirección. Desarrollé un objeto DtoCache que básicamente contenía una referencia a cada AsyncCallback que esperaba una respuesta de una llamada de servicio en una cola de espera. Una vez que DtoCache recibió los objetos del servidor, se almacenaron en caché dentro de DtoCache. El resultado almacenado en caché se devolvió en adelante a todos los AsyncCallbacks en cola y recién creados para la misma llamada de servicio.

1

Para un motor de almacenamiento en caché muy sofisticado y ya construido para operaciones CRUD, considere Smart GWT. Este ejemplo demuestra la capacidad de hacer operaciones del lado del cliente de forma adaptativa (cuando la memoria caché permite) de paginación al mismo tiempo el apoyo de grandes conjuntos de datos:

http://www.smartclient.com/smartgwt/showcase/#grid_adaptive_filter_featured_category

Este comportamiento se expone a través de la clase ResultSet si usted necesita para poner su propios widgets en la parte superior de la misma:

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/ResultSet.html

0

pensé Itemscript era una especie de limpia. Es una base de datos RESTful JSON que funciona tanto en el cliente (GWT) como en el servidor.

¡Échale un vistazo!

-JP

1

Hay dos niveles de almacenamiento en caché:

  • almacenamiento en caché durante una sesión de navegación.
  • Almacenamiento en caché de sesiones de navegador cruzadas, por ejemplo, los datos en caché deben estar disponibles después de reiniciar el navegador.

Qué caché: depende de su aplicación, es posible que desee almacenar en caché

  • Los datos protegidos para el usuario particular
  • estáticos públicos (o semi-estática, por ejemplo, rara vez a cambio) de datos

cómo almacenar en caché:

  • Por primera almacenamiento en caché nivel, podemos usar el código GWT como se sugiere en las respuestas o escribir uno propio.
  • Para la segunda, debemos usar las funciones de caché del navegador. El enfoque estándar es poner sus datos dentro de html (ya sean archivos html estáticos o dinámicos generados por jsp/servlet por ejemplo). Su aplicación luego usa técnicas http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsOverlay.html para obtener los datos.
Cuestiones relacionadas