长期静态页面缓存

时间:2020-03-05 18:45:34  来源:igfitidea点击:

我维护了几个没有任何动态数据的客户端站点,所有站点都是使用c#的静态asp.net。
在极端的时间段(例如一周)内缓存整个页面是否有任何陷阱?

Kibbee,我们在网站上使用了几个控件(ad rotator,一些ajax扩展)。它们可能完全用html编写,但是为了方便起见,我只保留了我们在其他每个站点上使用的内容。

解决方案

回答

当我们说自己没有数据时,甚至如何使用asp.net或者c#。通过纯HTML可以为我们提供什么功能?另外,如果我们计划缓存,则最好将其缓存到文件中,然后在发出请求时将文件流式传输出去。操作系统将负责将文件保留在内存中,这样我们就不必一直从磁盘上读取文件。

回答

如果要执行此操作,则可能需要构建缓存更新机制,只是为了确保可以在需要进行代码更新时清除缓存。除此之外,我没有想到的任何问题。

回答

当我们要更新数据时,长缓存时间的唯一重大陷阱就是发生。为了安全起见,我们必须假设新版本上市可能需要一周的时间。诸如ISP级别的代理服务器之类的中间主机通常会主动进行缓存,因此会发生这种延迟。

如果要缓存大文件,我将确保内容引擎支持If-Modified-Since。

对于较小的文件(页面内容,CSS,图像等),减少往返次数是关键,有效期较长(一年?)并且在内容更改时更改URL是最好的。这使我们可以控制用户代理何时获取新内容。

雅虎!已发布了有关减少HTTP请求和浏览器缓存使用情况的两部分文章。我不会在这里重复所有这些内容,但是这些都是不错的读物,它们将指导我们执行操作。

我的感觉是,选择一个足够长的时间段来覆盖大多数用户的单个会话,但又要选择一个足够短的时间段,以便在我们希望更新内容时不会造成太大的不便。如果我们对所有内容都具有Last-Modified,请确保支持If-Modified-Since。

最后,如果内容是完全可缓存的,并且我们需要立即推出新内容,则可以始终使用新的URL。如果我们希望发布指向最新版本的永久链接,那么最终的可缓存内容URL可以位于固定的HTTP 302重定向URL后面。

回答

我正在从事的项目中也存在类似的问题。有些数据几乎是静态的,但可以随时更改。

我最终要做的是将数据保存到本地文件,然后监视其更改。除非我们删除文件,否则永远不会命中数据库服务器,在这种情况下,它将搜索数据库并重新生成数据文件。

因此,在加载/保存时,我们基本上只有一点磁盘IO,除非有必要,否则不会流向DB服务器,并且我们仍在控制它(我们可以手动删除或者编写脚本等)。

我还应该补充一点,如果我们想减少磁盘IO(我们确实不需要),则可以将其与实际的Web服务器缓存模型联系起来。

这可能完全是错误的解决方法,但是对我们来说似乎很好用:)

回答

如果它是静态的,则最好生成一次页面,然后直接提供生成的静态HTML文件。

回答

如果是静态的,为什么还要烦恼缓存呢?让IIS担心它。