是否可以知道文件是否在用户的浏览器缓存中?

时间:2010-10-29 06:06:43

标签: javascript browser-cache

我正在做这样的事情:如果图像缓存在用户的计算机上,并且其时间戳与服务器上的时间戳相同,则显示缓存版本;否则,请勿从服务器加载图像。

我想也许JavaScript可以做到这一点,所以我将这篇文章标记为javascript。如果不合适,请帮我重新标记。

编辑:在这里,我详细介绍了我要实施的内容。我正在开发类似于基于Web的文件浏览器,只有当用户单击每个图像旁边的“视图缩略图”按钮时才会加载缩略图。如果已经缓存了缩略图,请使用缓存版本;否则,显示通用图像图标。

5 个答案:

答案 0 :(得分:1)

这对我来说有点奇怪。

您将功能描述为显示文件列表,并为用户提供单击“查看缩略图”的选项。这意味着如果用户专门请求图像,它将仅尝试从服务器加载图像 - 因此您已经停止了大量图像的大量加载的可能性。

因此,如果图像不在我的浏览器缓存中,那么在我第一次访问时将没有,那么我将获得通用图像图标。在我下次访问时,图像仍然不在我的缓存中,因此我将再次获得通用图像图标。那么除了通用图片图标外,我怎么会看到任何东西?

现在进入一个我承认不符合您要求的解决方案,但这是此类软件的典型实现。

  1. 使用“show thumbnail”选项显示文件
  2. 当选择“显示缩略图”选项时,从服务器加载缩略图(请注意,脚本通常会提供已调整大小的图像,这些图像也可能存储在服务器上,以避免再次处理调整大小一定的时间)
  3. 浏览器会自动缓存图像并暂时阻止服务器进一步请求

答案 1 :(得分:1)

我的RSS阅读器,对于包含大量帖子的Feed,会加载整页帖子。条目数取决于实际窗口的大小。当我滚动到列表底部时,如果有更多帖子,它将加载另一页。

这适用于您的文件浏览器吗?这意味着用户总是会加载20个缩略图,但除非有必要,否则永远不会加载。我从未使用过要求我点击查看缩略图的文件浏览器。

答案 2 :(得分:0)

这不是你必须担心的事情。浏览器会自动为您执行此操作。您必须确保服务器正在发送正确的标头。它有助于对文件进行适当的缓存设置,以避免额外的HEAD请求。

答案 3 :(得分:0)

你难道不能在服务器上移动/删除/重命名吗?然后使用javascript Image.onError处理损坏的图片,以隐藏没有缓存图片的人的损坏图片标记。

我认为这会为那些在其broswer chache中拥有它的人显示缓存版本。其他人不会做任何事情

答案 4 :(得分:0)

浏览器可以发送“If-Modified-Since”和“ETag”标头,以向服务器指示它确实具有资源版本。查看有关这些标题的W3 caching rules

您可以在服务器上查询这些标头,如果找不到,则发回通用图标,如果找到则返回“304 Not Modified”响应。