长期静态页面缓存

时间:2008-08-30 23:28:54

标签: c# asp.net caching static

我维护了几个没有动态数据的客户端站点,一切都是带有c#的静态asp.net 是否有任何陷阱需要将整个页面缓存一段时间,例如一周?

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

6 个答案:

答案 0 :(得分:2)

当您想要更新该数据时,会出现长缓存时间的唯一重大缺陷。为了安全起见,您必须假设新版本可能需要一周的时间才能使用。诸如ISP级代理服务器之类的中间主机通常会积极地缓存,因此会发生这种延迟。

如果要缓存大文件,我会考虑确保您的内容引擎支持If-Modified-Since。

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

雅虎!已发表关于reducing HTTP requestsbrowser cache usage的两篇文章。我不会在这里重复这一切,但这些都是很好的读物,它们将指导你做什么。

我的感觉是选择一个足够长的时间段来覆盖大多数用户的单个会话,但是如果您希望更新内容,则足够低以免造成太多不便。请务必支持If-Modified-Since如果您对所有内容都进行了Last-Modified。

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

答案 1 :(得分:1)

我正在处理的项目中存在类似的问题。有些数据几乎是静态的,但是可以改变......

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

那么我们在加载/保存时基本上有一点磁盘IO,除非有必要,否则我们仍然无法控制它(我们可以手动删除或编写脚本等)。

我还应该补充的是,如果你想减少磁盘IO(我们在这种情况下我们真的不需要),你可以将它与实际的Web服务器缓存模型联系起来。

这可能完全是错误的做法,但它对我们来说似乎相当不错:)

答案 2 :(得分:1)

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

答案 3 :(得分:0)

当你说你没有数据时,你甚至如何使用asp.net或c#。通过纯HTML提供哪些功能?此外,如果您计划进行缓存,最好缓存到文件,然后在发出请求时,流出文件。操作系统会将文件保存在内存中,这样您就不必一直从磁盘上读取文件。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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