【发布时间】:2016-12-18 20:21:14
【问题描述】:
我们的网页包含基于 36 张产品图片的 360 度产品查看器。一次只显示一个图像,所有其他图像都被隐藏。所有图像都从没有缓存指令的 AWS S3 存储桶提供(应该是这样)。在第一次启动 JS 插件显示 36 图像的预加载器和 加载后一切正常。
当用户在另一个选项卡中工作时,当网络选项卡(仅在 chrome 中测试)长时间(几个小时)保持打开状态时,就会出现问题。那些隐藏的图像正在从缓存中删除,JS 脚本再次重新加载所有这些图像,360 药物看起来很奇怪(不流畅)。浏览器加载所有缺失的图像后,它会再次开始流畅地工作,并且在几个小时不活动后它会再次重复。
这种行为是我们所期望的,但我们想以某种方式检查隐藏图像是否不再缓存以调用预加载器。
我在网络和 stackoverflow 中搜索了答案,但所有其他与缓存相关的问题都没有回答我的问题,例如“检查图像是否在重新打开浏览器或缓存后被缓存”。我的问题是:如何检查隐藏图像是否仍在缓存中?
示例代码赞赏。谢谢!
PS - 我知道如何为从 S3 传递的图像启用缓存标头,这不是一个选项。
PSS - 创建 1px 图像支架也不是一种选择。
【问题讨论】:
-
不确定它是否正是您正在寻找的解决方案,但如果您调用预加载器会怎样——无论如何?如果图像在缓存中 - 一切正常并且不会与服务器建立新连接,否则 - 图像将在需要时可供浏览器使用。至于什么时候运行预加载器——我想你可以有一个变量来保存
lastPreloadTime,如果用户与页面有任何交互(鼠标输入在文档上?),检查是否(比如说)10分钟后过去了最后一次预加载,然后再次运行预加载。 -
感谢您的建议,但这也不是一个选择。我们已经考虑过了,但这是一个非常复杂的系统,不仅仅是 36 张图像,还有许多动态预加载的图块(在缩放事件等时),用户可以切换到该选项卡仅检查当前(最后)ajax 返回的统计信息和可能不需要完全重新加载,因此我们宁愿仅在确实需要时才中断用户界面 - 例如当我们从缓冲区中丢失隐藏图像时。
-
不确定我是否理解您的问题。假设您有一个魔术函数,它获取图像列表(您的隐藏图像)作为输入,并返回这些图像的子列表,这些图像不再在缓存中。现在 - 您将预加载这些图像(使用您的预加载器功能)。为什么你需要这个神奇的功能来告诉你图像是否被缓存?只需再次运行预加载器(在隐藏图像上),您将从缓存(或服务器)中获取它们。您知道隐藏的图像,只需预加载它们。
-
再次感谢,但我不是在寻找解决方法,我有确切的问题。 PS - 我们正在使用大量的外部自定义 jQuery 插件,该插件仅提供缩小版本并每月更新,所以我不想每年 12 次弄乱它的代码。我们请求了几个函数和回调,但现在在 SUBJECT 上寻找答案。
标签: javascript amazon-web-services amazon-s3 browser-cache