修复Flash的激进缓存

时间:2010-12-13 18:32:38

标签: flash actionscript-3 caching

我有一个Flash应用程序,它会加载大量数据,偶尔会更改 ,因此我将服务器设置为发送Last-Modified标题并在304 Not Modified时回复客户的版本不会过时。

它在每个浏览器中都能正常工作,但Flash完全忽略了这一点,并且积极地缓存资源。它甚至不向服务器发送请求,它只是在您尝试URLLoader.load以前访问过的URL时从磁盘检索缓存文件。

我在google上找到的解决方法对我没有帮助 - 要么永久缓存,要么每次都重新下载资源(更改URL参数)。我需要混合使用这些 - 在资源更新时重新下载,否则使用缓存。

2 个答案:

答案 0 :(得分:4)

您可以使用版本号作为URL参数...这样,每次Flash Player加载时都不会重新下载,只有在您实际更改版本号时才会重新下载

答案 1 :(得分:1)

我不知道这是否有效,但值得尝试。

您可以尝试在文件请求中附加缓存断开代码。通常,您可以通过将随机字符串附加到文件名的末尾来完成此操作,例如new URLRequest("bigFile.foo?uncache=273095285209750")。对于您而言,您可以使用日期对象来生成字符串,而不是使用随机字符串。例如......

var now:Date = new Date();
var request:URLRequest = new URLRequest("bigFile.foo?uncache=" + new Date(now.year, now.month, now.date));

这有望强制内容每天重复一次(或小时,或者经常需要)。如果您需要更精细的控制,您可以编写一个简短的服务器端脚本来查看该文件是否已被修改,并在请求大量下载之前检查该文件。

我希望这有帮助!