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