当前位置: 首页 > 知识库问答 >
问题:

JavaFX WebView中的缓存

狄天逸
2023-03-14

我们正在开发JavaFX2。x应用程序,需要提供一些GIS支持。我们得出结论,通过嵌入式网络视图使用GoogleMaps是最快的选择。问题是,每次应用程序启动时,都会下载相应的JavaScript库。这使得开发非常困难,因为在WebView面板上进行任何交互都需要几秒钟的时间。

首先想到的是像Web浏览器一样拥有某种缓存,以便在需要时存储库并在本地读取它们。WebView如何实现这一点?在我们的案例中,有没有缓存的替代方案?

Thanx。

共有1个答案

阮才俊
2023-03-14

WebView组件不提供现成的web资源缓存。然而,它确实利用了java。用于网络通信的网络堆栈。这意味着您可以安装自己的URL处理程序,该处理程序与缓存对话,并为该缓存中的资源提供服务。例如,在JavaFX启动调用之前,在您的main()方法中放置类似于此的块:

URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory() {
    public URLStreamHandler createURLStreamHandler(String protocol) {
        if ( "http".equals(protocol) ) {
            return new URLStreamHandler() {
                protected URLConnection openConnection(URL u) throws IOException {
                    if ( isCached(u) ) {
                        return new CachedStreamConnection(u);
                    }
                    return new MyURLConnection(u);
                }
            };
        }
        // Don't handle a non-http protocol, so just return null and let
        // the system return the default one.
        return null;
    }
});

当然,魔鬼在细节中。在缓存中存储资源时,您应该考虑HTTP标头(如ETags)返回的缓存策略。另一个考虑因素是超文本标记语言元标记。这里有一个关于缓存的好资源。

您可能还需要考虑使用cookie管理系统来补充此缓存管理系统。

 类似资料:
  • 问题内容: 我对DNS缓存感到困惑。我正在编写一个小型转发代理服务器,并想在Linux系统上使用OS DNS缓存。 如果我理解正确,则在浏览器级别存在DNS缓存。然后在OS级别进行DNS缓存(Windows拥有DNS缓存。我不确定Linux发行版是否默认具有它)。 那么,浏览器/代理服务器如何使用OS DNS缓存?我正在尝试查找是否可以依靠Linux进行DNS缓存,而不是自己在代理内部进行缓存。

  • 问题内容: 我想在Redis中实现绝对缓存和滑动缓存。没有人有任何资源链接,这将是有帮助的 问题答案: Redis已经为此提供了许多命令: 到期:设置密钥超时。 期望值:与以前相同,但是需要一个绝对的Unix时间戳(自1970年1月1日以来的秒数)。 TTL:返回具有超时功能的键的剩余生存时间 您必须了解有关Redis过期的重要一件事:仅当使用SET或GETSET移除或覆盖键时,才会清除超时值。所

  • 我正在使用WildFly 8.1,所以JPA 2.1和Hibernate 4.3.5 我想在WildFly中使用JPA共享缓存/二级缓存 我遵循WildFly文档:https://docs.jboss.org/author/display/WFLY8/JPA参考指南#使用InfinispanSecondlevelCache的JPA参考指南 这是我的persitience.xml: 我将属性设置为h

  • 问题内容: 我有一个Web应用程序,人们需要资源。使用同步哈希映射来缓存此资源以提高效率。这里的问题是,当两个不同的请求同时到达同一未缓存资源时:检索资源的操作占用大量内存,因此我想避免为同一资源多次调用它。 有人可以告诉我以下代码段是否存在任何潜在问题吗?提前致谢。 问题答案: 一个可能的问题是,您通过在一个块内执行来创建不必要的竞争,因此许多线程无法同时检索其(独立)资源。这可以通过使用map

  • 问题内容: 近,我看到一个演示,其中包含以下Java代码示例: 现在我有些困惑。我知道为什么在第一种情况下结果为“假”-这是因为整数是引用类型,而“ a”和“ b”的引用是不同的。 但是,为什么在第二种情况下结果为“ true”? 我听到一种意见,出于某些优化目的,JVM将对象的int值从-128缓存到127。这样,“ c”和“ d”的引用是相同的。 有人可以给我更多有关此行为的信息吗?我想了解此

  • 我有一个数据流,其中包含一个键,我需要将其与与该键关联的数据进行混合和匹配。每个键都属于一个分区,每个分区都可以从数据库加载。 数据非常大,在一个任务管理器中,几十万个分区中只有几百个可以容纳。 我目前的方法是基于并将分区数据缓存在中,以混合和匹配分区数据,而无需多次重新加载分区数据。 当同一分区上的消息速率过高时,我遇到了热点/性能瓶颈。 在这种情况下,我在Flink中有哪些工具可以提高吞吐量?