小编Joh*_*ood的帖子

JavaFx WebView缓存

我一直在尝试为WebView实现基于光盘的缓存,但只取得了部分成功,我特别试图缓存.js javascript外部文件,这会大大减慢javascript网页的加载速度.

Oracle文档声明:"在使用WebView组件时,您应该记住它具有默认的内存缓存.这意味着一旦包含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文件并显着提高性能,但是有一些网站处理错误,特别是Outlook的电子邮件.

在查看我的代码处理方式时,我发现例如URLLoader代码设置了setUsesCaches(false),代码中包含以下注释(在当前1.8.0_66代码中的URLLoader.java的第279行):
//给定WebKit有自己的缓存,不要使用
//任何URLConnection缓存,即使有人安装它们.
//作为副作用,这解决了WebPane不能
正常使用插件缓存的问题,这是
导致RT-11880的原因之一.

那么有人可以告诉我一个真正发生的事情吗?

  • Oracle文档说WebKit有一个内存缓存,可以被ResponseCache覆盖,但事实并非如此.
  • JDK-8014501说明了这个问题,但已被标记为"不是问题".为什么不是问题?
  • 围绕"URL.setURLStreamHandlerFactory"和"URLConnection"拦截的重要编码产生了具有显着性能提升的功能缓存,但是被故意引入URLLoader代码的问题解除了.

提前感谢您的任何反馈,

java caching webview

10
推荐指数
1
解决办法
2076
查看次数

标签 统计

caching ×1

java ×1

webview ×1