客户端缓存的空间限制

时间:2014-06-28 13:29:11

标签: java image performance caching

我有一个返回40张图片的搜索结果页面。我使用mongohq来存储我的图像。 现在这些图像永远不会改变。它们将被删除或保留原样。

所以我的Spring servlet在根据图像id

从mongoHq读取后流式传输图像
/app/download/{uniqueImageId}

一切都很好。除了流式传输图像的加载时序。我觉得这些独特的ID会保持这些图像不变,所以为什么不缓存它们。我可以添加一个适用于我上面的url类型的过滤器并添加一个缓存标题,我计划给出一个非常长的值,比如可以将图像缓存一周。

我的问题是,如果我开始告诉客户的浏览器缓存所有这40多个图像,它会缓存所有这些图像吗? Aren客户端有空间限制吗?

你认为有更好的选择来处理这种情况吗?

1 个答案:

答案 0 :(得分:1)

  

我的问题是,如果我开始告诉客户端的浏览器缓存所有这40多个图像,它会缓存所有这些图像吗?客户方没有空间限制吗?

当然,客户端存在空间限制(整个世界的存储空间也是有限的......嗯,对不起......)。用户可以限制缓存空间,和/或浏览器自动获取可用于缓存的可用空间。

通常情况下,我希望浏览器缓存总是几兆字节(比方说100+),因此会话中经常需要的图像(如图标)将被缓存。当用户三天后访问您的网站时,图片是否仍在缓存中,取决于缓存大小和用户活动。所以你永远不会知道。

客户或任何中间代理所做的事情是您无法直接控制的。通过设置缓存标头,您唯一要做的就是说,暂时刷新此资源是合法的。如果您在应用程序中设置了标题,请确保正确理解HTTP1.1标头。

  

你认为有更好的选择来处理这种情况吗?

这里的“更好”这个词并不十分精确。您究竟需要优化什么?

如果您在同一图像集上有很多请求,则可以通过将边缘服务器(如nginx)放在应用程序前面来减少服务器和数据库负载,该服务器配置为缓存反向代理。在这种情况下,您自己的边缘服务器正在解释缓存标头。一般来说,如果应用程序在提供静态资源方面没有明显负担,我认为这是一个很好的设计。