3

我正在尝试更新小程序的缓存。小程序正确缓存,但之后,无论缓存多么陈旧,它都不会更新。如果我手动删除缓存,将在下一页加载时创建一个新缓存,并且我尝试缓存的 .jar 文件的所有更改都会生效。但是,必须这样做是不可接受的。

我曾尝试在我的索引文件中将 cache_archive 与 cache_version 结合使用,如下所示:

if (navigator.appVersion.indexOf("Win")!=-1){
    var attributes = { id:'manager', code:'HardwareManagerApplet_FileWriter',          width:1, height:1} ;
    var parameters = {jnlp_href: '/java/HardwareManagerApplet.jnlp', codebase: '/java/hardwaremanager.jar', cache_archive:'hardwaremanager.jar',  cache_version:'0.0.0.7'};
    check = deployJava.runApplet(attributes, parameters, '1.6');
    hardware_enabled = true
    console.log("Applet started")
}

这是没有效果的。我尝试将 cache_archive 和 cache_version 移动到属性中,并且之间的各种排列无济于事。我尝试将 cache_option 设置为第一个浏览器,然后再次尝试将其设置为插件。没有骰子。我研究了 ETags,但我不相信这会是最好的解决方案。我也研究了 last-Modified,但是 A)我不确定如何在 http 中实现它,以便缓存会更新和 B)如果我必须走那条路线,它将打开一个全新的罐头。

还有其他合理的选择吗?更好的是,我只是错误地实现了 cache_archive 等吗?

实际上,即使我可以在每次页面加载时缓存它,我也会感到满意。

感谢所有和任何帮助!

编辑:关于代码块是我用cache_archive等实现的唯一实现。我需要在其他地方放几行吗?就 Oracle 的文档而言,我认为这不是很清楚。

4

2 回答 2

2

您缺少缓存选项的参数,如下所示

cache_option 属性可以采用以下三个值之一:

  • - 禁用小程序安装。始终从 Web 服务器下载文件。
  • 浏览器- 从浏览器缓存运行小程序(默认)。
  • 插件- 从新的 Java 插件缓存运行小程序。

默认情况下,浏览器必须清除浏览器缓存才能使更新的值生效。使用插件来充分利用您想要实现的版本控制。

于 2011-07-12T16:13:45.543 回答
0

小程序的缓存是虚拟机 (JVM) 和浏览器的工作。浏览器和 JVM 都针对缓存小程序进行了优化以提高性能。

我的解决方案是两者之一:

  1. 每次构建类后清除虚拟机的缓存:打开 Java 控制台并键入x(ClassLoader-Cache clear)。然后刷新浏览器。或者
  2. 关闭浏览器并重新开始

我更喜欢解决方案1。

于 2011-07-24T22:51:34.427 回答