在2000年的论文“Rules of Thumb in Data Engineering”中,他们提出了以下规则:
“缓存网页,如果有可能的话 在他们的一生中重新引用。“
今天这仍然适用吗?带宽便宜且快速,网站通常是动态的,因此缓存命中率较低(我猜是这样,这是正确的吗?)。缓存网站仍然有意义吗?如果是这样,哪些数据被缓存?我可以想象图片或文章,但我的个人推特网站怎么样?甚至对于文章来说,可能会有我想要了解的突发新闻,因此缓存中数据的生命周期应该很低。
这个经验法则是否仍然相关?它在实践中如何使用?
答案 0 :(得分:2)
缓存在今天也非常重要。因此,您的网站反应更快,您的服务器可以处理更多客户端。
基本上你应该让客户端缓存像css,js和images这样的静态内容。如果需要重新加载文件,可以添加新的查询字符串。
恕我直言是使用过期日期的最佳伎俩。在文件过期之前,客户端不会请求文件。 etag对于检测动态内容的变化也非常有用。
您还应该记住,移动网络与DSL和co。相比非常慢。
答案 1 :(得分:2)
正如我们社区的其他成员已经说过的那样,缓存是非常重要的工具,当然如果你想减少服务器负载和延迟))我只想分享一些我必须学习的技巧。过去2-3周:
第一件事:您可以使用Last-Modified
(以及If-Modified-Since
实现返回ETag/If-None-Match
http标头以响应请求,唯一的区别是当Last-Modified表示日期时,Etag表示一些散列值。您只需要比较If-Modified-Since
和Last-Modified
日期,如果页面,图片等是陈旧的,请使用200 OK
状态代码返回它。如果图像尚未修改您只返回304 Not Modified
状态(图像从浏览器缓存中提供)
在这种情况下,您应该在客户端(浏览器)上缓存图像。
如果要减少数据库查询的数量,也可以将它们缓存在服务器上。或者您可以使用两者:ServerAndClient。
第二件事:过去两周我一直在努力采用这种方法)
我将Expires
响应标题设置为永久(例如1年)并在客户端上缓存图像。如果图像已更改,我构建新的Url(包含散列图像'上次写入日期)。
我创建了一个monitores images文件夹的Windows服务,如果图像已被更改,它会将最后修改日期写入数据库。比我将此图片的上次修改日期添加到网址。
这种方法的好处是只有在图像被更改时才会命中服务器。
E.g。在第一个描述的方法中,浏览器必须向服务器发送请求以在从其自己的高速缓存获取图像之前验证图像是否是新鲜的。
第三件事:不要自己使用Expires
http标头(不实施Last-Modified
或Etag
)因为如果您缓存,例如,在客户端上的图像,浏览器将从其缓存中获取此图像,除非时间到期。因此,如果图像已被修改,除非时间到期,否则用户将看不到它。
希望我在缓存方面的经验能帮助你:)
P.S。缓存所有可能的内容!
答案 2 :(得分:1)
缓存与静态数据(如图像,CSS样式表,Javascript代码文件等)相关,因为它允许页面在重复点击和子页面上加载更快。而且对于静态HTML页面,但正如您所指出的,许多页面现在都是动态的,它们通过HTTP标头宣布它们不应该被缓存。
答案 3 :(得分:0)
是的,这很重要...特别是因为提供了一种从最近出现的网站中检索信息的方法