【发布时间】:2010-09-07 09:07:21
【问题描述】:
我维护了几个没有任何动态数据的客户端站点,一切都是使用 c# 的静态 asp.net。
将整个页面缓存一段时间(例如一周)是否有任何缺陷?
Kibbee,我们在网站上使用了几个控件(广告旋转器、一些 ajax 扩展)。它们可能完全用 html 编写,但为了方便起见,我只是坚持使用我们用于其他所有网站的内容。
【问题讨论】:
我维护了几个没有任何动态数据的客户端站点,一切都是使用 c# 的静态 asp.net。
将整个页面缓存一段时间(例如一周)是否有任何缺陷?
Kibbee,我们在网站上使用了几个控件(广告旋转器、一些 ajax 扩展)。它们可能完全用 html 编写,但为了方便起见,我只是坚持使用我们用于其他所有网站的内容。
【问题讨论】:
当您想要更新该数据时,长缓存时间的唯一重大缺陷会发生。为了安全起见,您必须假设新版本最多需要一周时间才能可用。 ISP 级别的代理服务器等中间主机通常会积极缓存,因此会发生这种延迟。
如果要缓存大文件,我会考虑确保您的内容引擎支持 If-Modified-Since。
对于较小的文件(页面内容、CSS、图像等),减少往返次数是关键,具有较长的有效期(一年?)并在内容更改时更改 URL 是最好的.这让您可以控制用户代理何时获取新内容。
雅虎!在reducing HTTP requests 和browser cache usage 上发表了一篇两部分的文章。我不会在这里重复一遍,但这些都是很好的读物,可以指导你做什么。
我的感觉是选择一个足够高的时间段来覆盖大多数用户的单个会话,但又足够低,以免在您希望更新内容时造成太多不便。如果您的所有内容都有 Last-Modified,请务必支持 If-Modified-Since。
最后,如果您的内容完全可以缓存并且您现在需要推出新内容,那么您始终可以使用新的 URL。如果您希望发布指向最新版本的永久链接,这个最终的可缓存内容 URL 可以位于固定的 HTTP 302 redirect URL 后面。
【讨论】:
在我正在进行的一个项目中,我们遇到了类似的问题。有些数据几乎是静态的,但可以更改..
我最终做的是将数据保存到本地文件,然后监控它的变化。除非我们删除文件,否则永远不会访问数据库服务器,在这种情况下,它会飞到数据库并重新生成数据文件。
所以我们在加载/保存时基本上有一点磁盘 IO,除非必要,否则不会向数据库服务器发送流量,并且我们仍然可以控制它(我们可以手动删除或编写脚本等)。
我还应该补充一点,如果你想减少磁盘 IO(在我们的例子中我们并不真正需要),你可以将它与实际的 Web 服务器缓存模型结合起来。
这可能是完全错误的做法,但它似乎对我们很有效:)
【讨论】:
如果它是静态的,为什么还要麻烦缓存呢?让 IIS 担心它。
【讨论】:
当你说你没有数据时,你甚至是如何使用asp.net或c#的。与纯 HTML 相比,它为您提供了哪些功能?此外,如果您确实计划缓存,最好缓存到文件中,然后在发出请求时将文件流出。操作系统会负责将文件保存在内存中,这样您就不必一直从磁盘读取它。
【讨论】:
如果您想这样做,您可能需要构建一个缓存更新机制,只是为了确保您可以在需要进行代码更新时清除缓存。除此之外,我想不出任何问题。
【讨论】:
如果它是静态的,您最好生成一次页面,然后直接提供生成的静态 HTML 文件。
【讨论】: