【问题标题】:Classic ASP cache busting (& yet still satisfying PageSpeed score)经典的 ASP 缓存破坏(但仍然满足 PageSpeed 分数)
【发布时间】:2016-02-16 16:57:43
【问题描述】:

场景:

我正在使用 IIS 和 ASP,我们需要缓存站点(让 Google Page Speed 和我的老板开心)。我们目前将 IIS 缓存 所有内容 (asp/JS/CSS) 为期 1 周。

问题:

更新 ASP 页面上的 HTML 内容后,我的老板在执行(强制)刷新之前会看到旧版本的页面。

问题:

更改 ASP HTML 内容后,如何(强制)更新服务器缓存?

我希望我的同事和经理能够看到最新的更改,而无需强制他们刷新浏览器。

【问题讨论】:

    标签: caching iis asp-classic pagespeed


    【解决方案1】:

    您是否配置为使用“If-Modified-Since”HTTP 标头?

    Scott Hanselman 的博客上的这个解释让你知道你在寻找什么 - Forcing an update of a cached JavaScript file in IIS

    此页面还为"If-Modified-Since" HTTP Header 提供了有用的入门知识

    【讨论】:

      【解决方案2】:

      看看能不能让老板开心。和你一样,我也有一些人认为 F5 或 Ctrl+F5 很烦人。

      快速查看,以确保 IIS 服务器上的输出缓存在更改时更新,让我们将其设置为“Cache until Change”。 我读到你每周都会清理它,但如果事情没有改变......为什么?

      让我们设置客户端浏览器缓存默认值。 对于所有页面标题,您都有以下内容,让页面使用 GMT 时间在 30 分钟后过期。 主标题:

      Dim dtmExp
      Response.Buffer = True
      Response.CharSet = "UTF-8"
      dtmExp = DateAdd("n", 30, Now())
      Response.ExpiresAbsolute = dtmExp
      Response.Expires = dtmExp
      

      我们有几个选项和方法来触发我们的标题更改。 您可以使用会话、Cookie、数据库更新等。在这个示例中,我正在使用会话随意更改周围的内容以更好地适应您的应用程序。

      PageEdit.asp

          Session("EditedPageFullURL") = "/yourpage.asp"
      

      在常用功能页面中添加以下内容。

      Function EditorsReload(eChk,erURL)
      If IsNumeric(eChk) Then
          Session("Editing") = eChk
      End If
      If Len(erURL) = 0 Then
          Exit Function
      End If
      If Session("Editing") <> "" Then
          If Session("Editing") = 1 Then
              If (LCase(erURL) = LCase(Request.ServerVariables("SCRIPT_NAME"))) Then
                  Session("Editing") = ""
                  Session("EditedPageFullURL") = ""
                  Response.Expires = -1
                  Response.ExpiresAbsolute = Now() -1 
                  Response.AddHeader "pragma", "no-store"
                  Response.AddHeader "cache-control","no-store, no-cache, must-revalidate" 
            End If 
          End If
      End If
      End Function
      

      将以下内容放在页面中您可能拥有的任何标题下方。

      Call EditorsReload(1,Session("EditedPageFullURL"))
      

      如果您的站点设置了登录和成员会话,您可以将其包装在“Session("AUTH")”中。 除此之外,仅当 Session("EditedPageFullRUL" 的长度大于 1 时才会触发。

      这将更新 bosses 浏览器标头,强制浏览器刷新本地缓存。 这是一次性交易,因此任何额外的页面刷新都使用标准标题。

      有很多方法可以做到这一点,所以要有创意!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-01
        • 2010-09-15
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多