Tengo una aplicación GWT desplegada en las máquinas de nuestro cliente. Como un desarrollo en curso junto, tenemos que lanzar nuevas versiones mejoradas de la aplicación de vez en cuando. Cada vez que lanzamos una nueva versión, nos encontramos con el problema donde el navegador del cliente ha almacenado en caché las secuencias de comandos antiguas y por un tiempo se comporta de manera estrangulada porque los datos con los que están tratando de trabajar no son del todo compatibles. ¿Cuál es la mejor manera de superar este problema? Actualmente tengo que decirle a los usuarios que borren la memoria caché de su navegador para una nueva versión, pero sería bueno que no tienen que hacer esto.Detener el almacenamiento en caché de los scripts del navegador en la aplicación GWT
Respuesta
De forma predeterminada, el grueso de la aplicación debe almacenarse en la memoria caché del navegador hasta que el proceso de compilación genere una nueva versión de la misma.
Puede ser útil comprender el modelo de arranque GWT para comprender cómo funciona esto.
El primer script que solicita su cliente, your-app-name.nocache.js
, no se almacena en caché, y no hace nada excepto consultar las capacidades y el agente de usuario del navegador y realizar una segunda solicitud para la aplicación correspondiente JS.
En este punto, la secuencia de comandos que solicita debe ser almacenada en la memoria caché por el navegador si se ha solicitado antes. Este es un archivo {indistinguisable-numbers-and-letters}.cache.html
.
Cuando vuelve a implementar su aplicación, el archivo nocache.js
se ejecutará y pedir una cache.html
archivo diferente del servidor, lo que no será ya presente en la memoria caché, pero que obtendrá en caché por el navegador una vez que se haya descargado.
¿Está haciendo algo inusual con el enlace diferido, o con los encabezados de almacenamiento en caché en su servidor? Esto podría causar que su archivo nocache.js
se guarde en caché después de todo, lo que haría que solicite el viejo cache.html
s de la memoria caché del navegador.
La solución posible depende de la forma en que esté alojando su aplicación. Si usted está recibiendo directamente del contenedor de servlets, a continuación, puede utilizar el filtro servlet como el que se describe a continuación:
http://seewah.blogspot.com/2009/02/gwt-tips-2-nocachejs-getting-cached-in.html
Éstos son filtros apropiados de la biblioteca tadedon:
Y aquí está Guice ServletModule que les permite la aplicación web entera guice:
Si está utilizando algún proxy inverso delante de tomcat, sería incluso más simple. En el caso de Apache (por ejemplo, mod_proxy, mod_jk), y suponiendo que todos los recursos de la aplicación (html, gráficos, scripts de Java, CSS, etc.) Se ponen en Apache, acaba de establecer estas opciones en la configuración de Apache:
<Files *.nocache.*>
ExpiresDefault "access"
</Files>
<Files *.cache.*>
ExpiresDefault "now plus 1 year"
</Files>
Se describe aquí:
http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html
en la sección "perfecto almacenamiento en caché". Tal escenario de implementación supone que solo las solicitudes de rpc deben pasar por proxy inverso a tomcat. Si por alguna razón todo el contexto de la aplicación se envía a tomcat, puede seguir utilizando la directiva LocationMatch
de apache en lugar de la directiva Files
.
- 1. ¿Filtro de servlet para el almacenamiento en caché del navegador?
- 2. Cómo manejar el almacenamiento en caché de los archivos CSS del tema GWT
- 3. Prevención del almacenamiento en memoria caché de la aplicación Flex en el navegador (módulos múltiples)
- 4. configurando Tomcat para aprovechar el almacenamiento en caché del navegador?
- 5. Cómo detener Chrome desde el almacenamiento en caché
- 6. ¿El almacenamiento en caché del navegador tiene en cuenta los parámetros en la URL? (Página ASPX)
- 7. Caché del lado del cliente en GWT
- 8. Cómo detener marco de la entidad de almacenamiento en caché
- 9. Almacenamiento en caché del lado del servidor en openrasta
- 10. Almacenamiento en caché del navegador de BlackBerry incluso con metaetiquetas sin memoria caché
- 11. Apalancamiento Caché del navegador
- 12. Prevención del almacenamiento en caché del navegador en actualizaciones de aplicaciones web
- 13. Deshabilitar el almacenamiento en caché del navegador para todos los navegadores desde ASP.NET
- 14. Teoría del almacenamiento en caché
- 15. ¿La aplicación GWT funciona bien en el navegador Android?
- 16. Habilitación del almacenamiento en caché del lado del navegador para aplicaciones de carriles 3.1 en heroku
- 17. ¿Por qué? El almacenamiento en caché de salida desactiva automáticamente la caché del navegador en IIS 7.5
- 18. Cómo prevenir la página del navegador de almacenamiento en caché en Rails
- 19. Cómo detener el almacenamiento en caché de MVC los resultados de invocar un método de acción?
- 20. Almacenamiento en caché de Chrome como un navegador loco
- 21. Estrategia de almacenamiento en caché para la aplicación de Android
- 22. aplicación GWT refrescante en el lado del cliente
- 23. crossdomain.xml previene el almacenamiento en caché
- 24. apalancamiento memoria caché del navegador
- 25. Cómo aprovechar el almacenamiento en caché del navegador en ASP.net IIS 7.5
- 26. mejor manera de desactivar el almacenamiento en caché del cliente
- 27. Detección del navegador móvil en GWT
- 28. ¿Desea aprovechar el almacenamiento en caché del navegador con web.config en .net?
- 29. Mejor manera de evitar el almacenamiento en caché del navegador de archivos JavaScript
- 30. cómo borrar el caché en gwt?
Jason, parece que es un efecto secundario de su nombre de aplicación.nocache.js almacenado en el navegador. Shahid tiene que configurar su servidor para almacenar en caché solo * .cache.js y para no almacenar en caché * .nocache.js. Aparte de eso, todo lo que ha mencionado debe colocarse automáticamente. –
@ jason-hall cualquier idea sobre cómo inyectar algo de hash a la url de los scripts que se cargan a través de su-app-name.nocache.js? En mi caso, your-app-name.nocache.js se carga correctamente sin almacenamiento en caché, pero las secuencias de comandos que se cargan como resultado de esto, aún están almacenadas en caché. Me gustaría generar un hash en cada compilación y agregarlo a la url ... – Mabedan