我有一個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. 如何停止在瀏覽器中緩存流式Comet通信
- 2. 在Rails和瀏覽器中停止緩存圖片?
- 3. 瀏覽器停止/崩潰是否停止腳本執行?
- 4. 如何避免在瀏覽器中停止腳本錯誤
- 5. 在瀏覽器中緩存ASP.NET Ajax ScriptManager腳本
- 6. 在瀏覽器關閉時停止執行php腳本
- 7. 阻止xmlHttpReq的瀏覽器緩存
- 8. 阻止瀏覽器緩存會話ID
- 9. 完全禁止瀏覽器緩存
- 10. HTML緩存清單防止瀏覽器
- 11. jQuery圖像預加載/緩存停止瀏覽器
- 12. CrystalReports在瀏覽器中停止工作
- 13. PHP代碼停止腳本從Envoirnment瀏覽器
- 14. 停止瀏覽器後腳本仍然運行
- 15. 未從瀏覽器緩存中檢索圖像 - gwt upload
- 16. VueJS /瀏覽器緩存生成版本
- 17. 腳本不會停止,同時關閉瀏覽器或單擊中止
- 18. 在JSP中啓用瀏覽器緩存
- 19. jquery.js在瀏覽器中緩存嗎?
- 20. 在Angularjs中利用瀏覽器緩存
- 21. 在javascript中刪除瀏覽器緩存
- 22. 瀏覽器緩存不同網站共享的CDN腳本嗎?
- 23. 爲什麼瀏覽器不緩存Java腳本(Ajax)?
- 24. Spring-MVC 3.1:防止JSP在瀏覽器中被緩存
- 25. 防止JavaScript在瀏覽器中被緩存
- 26. 瀏覽器緩存HTML
- 27. 控制瀏覽器緩存
- 28. 槓桿瀏覽器緩存
- 29. 管理瀏覽器緩存
- 30. 谷歌瀏覽器緩存
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