我有一个GWT应用程序部署到我们客户的机器上。作为一个正在进行的 开发,我们必须不时发布新的改进版本的 应用程序。每次我们发布一个新版本时,我们通常会遇到这样的问题:客户端的浏览器已经缓存了 旧脚本脚本,并且一段时间它的行为蛮横,因为它尝试使用的数据与它不兼容。什么是 克服这个问题的最好方法。目前,我必须告诉用户 要清除浏览器的缓存以获得新版本,但它不会那么做,因此 不需要这样做。在GWT App中停止浏览器脚本缓存
回答
默认情况下,应用程序的大部分应由浏览器缓存,直到构建过程生成新版本的应用程序。
这可能有助于理解GWT引导模型,以了解其工作原理。
您的客户端请求的第一个脚本your-app-name.nocache.js
未被缓存,除了检查浏览器的用户代理和功能并且为相关应用程序JS发出第二个请求外,它什么也不做。
在这一点上,它所请求的脚本应该被浏览器缓存,如果之前已经被请求的话。这是一个{indistinguisable-numbers-and-letters}.cache.html
文件。
当您重新部署应用程序时,将会执行nocache.js
文件并向服务器索要不同的cache.html
文件,该文件不会存在于缓存中,但是一旦下载,该文件就会被浏览器缓存。
你是否在做任何与延迟绑定或服务器缓存头文件不同的事情?这可能会导致您的nocache.js
文件被缓存,这将使其从浏览器缓存中请求旧的cache.html
。
可能的解决方案取决于您托管应用程序的方式。如果您是直接从servlet容器托管,那么你可以使用Servlet过滤器像这里所描述的:
http://seewah.blogspot.com/2009/02/gwt-tips-2-nocachejs-getting-cached-in.html
下面是tadedon库适当的过滤器:
这里是guice ServletModule,它使它们可以用于整个guice web应用程序:
如果您正在使用Tomcat中这将是更简单的前一些反向代理。在apache(例如mod_proxy,mod_jk)的情况下,并假设所有的应用程序资源(html,图形,java脚本,css等等在 “完美缓存” 部分
http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html
:)都穿上了Apache,只需设置在Apache配置这些选项:
<Files *.nocache.*>
ExpiresDefault "access"
</Files>
<Files *.cache.*>
ExpiresDefault "now plus 1 year"
</Files>
在此描述。这种部署方案假定只有rpc请求应该通过反向代理到tomcat。如果由于某些原因,所有的应用程序上下文都被代理到tomcat,你仍然可以使用Apache的LocationMatch
指令而不是Files
指令。
- 1. 如何使浏览器停止缓存GWT nocache.js
- 2. 停止网络浏览器缓存
- 3. 跨浏览器缓存脚本文件
- 4. 通过浏览器缓存java脚本
- 5. 如何防止在浏览器中“停止运行此脚本”?
- 6. 停止浏览器缓存文本文件
- 7. 如何停止在浏览器中缓存流式Comet通信
- 8. 在Rails和浏览器中停止缓存图片?
- 9. 浏览器停止/崩溃是否停止脚本执行?
- 10. 防止缓存在浏览器
- 11. 如何避免在浏览器中停止脚本错误
- 12. 在浏览器中缓存ASP.NET Ajax ScriptManager脚本
- 13. 阻止xmlHttpReq的浏览器缓存
- 14. 因为浏览器(Chrome)缓存,我们如何停止Autofill文本框文本
- 15. 在浏览器关闭时停止执行php脚本
- 16. 阻止浏览器缓存会话ID
- 17. HTML缓存清单防止浏览器
- 18. 完全禁止浏览器缓存
- 19. jQuery图像预加载/缓存停止浏览器
- 20. CrystalReports在浏览器中停止工作
- 21. 停止浏览器请求
- 22. 停止浏览器加载未更新的缓存版本的网页。
- 23. PHP代码停止脚本从Envoirnment浏览器
- 24. 停止浏览器后脚本仍然运行
- 25. 如何停止仅用于IE浏览器的脚本8
- 26. 关闭浏览器后,Google应用脚本停止运行
- 27. 如何让浏览器停止在Firefox中缓存我的页面?
- 28. 在浏览器会话中强制浏览器缓存
- 29. 未从浏览器缓存中检索图像 - gwt upload
- 30. 没有缓存html停止服务器端缓存或只是浏览器缓存?
Jason,它看起来像是你的app-name.nocache.js缓存在浏览器中的副作用。 Shahid必须将其服务器配置为仅缓存* .cache.js并且不缓存* .nocache.js。 除了你提到的所有东西都应该自动落实到位。 – 2010-08-05 07:00:44
@ jason-hall关于如何向通过your-app-name.nocache.js加载的脚本的url注入一些散列的任何想法?在我的情况下,your-app-name.nocache.js在没有缓存的情况下被正确加载,但作为其结果加载的脚本仍然来自缓存。我想在每个构建生成一个哈希,并将其添加到网址... – Mabedan 2017-06-09 16:18:15