【问题标题】:Long-term Static Page Caching长期静态页面缓存
【发布时间】:2010-09-07 09:07:21
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net caching static


    【解决方案1】:

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

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

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

    雅虎!在reducing HTTP requestsbrowser cache usage 上发表了一篇两部分的文章。我不会在这里重复一遍,但这些都是很好的读物,可以指导你做什么。

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

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

    【讨论】:

      【解决方案2】:

      在我正在进行的一个项目中,我们遇到了类似的问题。有些数据几乎是静态的,但可以更改..

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

      所以我们在加载/保存时基本上有一点磁盘 IO,除非必要,否则不会向数据库服务器发送流量,并且我们仍然可以控制它(我们可以手动删除或编写脚本等)。

      我还应该补充一点,如果你想减少磁盘 IO(在我们的例子中我们并不真正需要),你可以将它与实际的 Web 服务器缓存模型结合起来。

      这可能是完全错误的做法,但它似乎对我们很有效:)

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            如果您想这样做,您可能需要构建一个缓存更新机制,只是为了确保您可以在需要进行代码更新时清除缓存。除此之外,我想不出任何问题。

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                猜你喜欢
                • 2017-06-07
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-12-27
                • 1970-01-01
                • 1970-01-01
                • 2011-08-24
                • 1970-01-01
                相关资源
                最近更新 更多