我一直在试图为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
@本你有没有解决好运?我也有同样的问题。 –