我一直在試圖爲WebView實現基於光盤的緩存,但只取得了部分成功,我特別試圖緩存.js JavaScript外部文件,這會減慢JavaScript網頁的加載速度。JavaFx WebView緩存
Oracle文檔指出: 「當web視圖組件工作時,你應該記住,它具有默認的內存緩存 這意味着,一旦含有的WebView組件在應用程序關閉任何緩存的內容會丟失。 但是,開發人員可以通過java.net.ResponseCache類在應用程序級別實現緩存。「
但事實並非如此。我使用java.net.ResponseCache類實現了一個內存緩存,但WebView很少使用它 - 它不時從緩存中存儲和檢索favicon.png - 沒有性能增益。
我證實了通過分析網絡通信量的WebView不緩存,從而證實了什麼是JDK-8014501說: 「雖然使用JavaFX的WebView組件javafx.scene.web.WebView導航,才發現, 每請求每次從服務器檢索所有資源,即使以前的活動剛剛檢索到資源。此行爲已通過捕獲和分析網絡流量進行驗證。 性能影響相當大。 JDK-8014501,於是我使用「URL.setURLStreamHandlerFactory」編寫了一個緩存處理程序來攔截所有的URLConnections到默認的sun處理程序。我在這方面取得了一些成功,並且能夠緩存.js javascript文件並顯着提高性能,但是有些bug處理某些網站,特別是Outlook的電子郵件。
在研究我的代碼處理方式時,例如,我發現URLLoader代碼在代碼中設置了setUsesCaches(false),代碼中包含以下注釋(URLLoader.java的第279行,代碼爲當前1.8.0_66) :
//鑑於WebKit具有其自己的緩存,請勿使用任何URLConnection緩存,即使有人安裝它們也不要使用
。
//作爲一個副作用,這可以修復WebPane問題而不是
//可以和插件緩存一起使用,該插件緩存是
// RT-11880的原因之一。
那麼有人可以給我一個關於真正發生的事情嗎?
- Oracle文檔說WebKit有一個可以被ResponseCache覆蓋的內存緩存,事實並非如此。
- JDK-8014501聲明問題,但被標記爲「不是問題」。爲什麼這不是問題?
- 對「URL.setURLStreamHandlerFactory」和「URLConnection」攔截進行編碼的signifant產生了一個功能緩存,其性能顯着提高,但是被故意引入到URLLoader代碼中的問題取消了。
預先感謝任何反饋,
我有相反的效果/問題。我的CSS文件由WebView緩存,我無法阻止它!只有在RESTARTING整個Java(FX) - 應用程序(或每次更改時重命名CSS文件)之後,我的CSS更改纔可見。覆蓋'ResponseCache'對我來說不起作用(我的響應緩存永遠不會被調用)... – Ben
很奇怪,這裏也是與你的問題完全相反的:http://stackoverflow.com/q/16211920/3887073 – Ben
@本你有沒有解決好運?我也有同樣的問題。 –