经典的ASP缓存破坏(并且仍然令人满意的PageSpeed得分)

时间:2016-02-16 16:57:44

标签: caching iis asp-classic pagespeed

情境:

我正在使用IIS和ASP,我们需要缓存网站(使Google Page Speed和我的老板很高兴)。我们目前有1个星期的IIS缓存所有(asp / JS / CSS)。

问题:

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

问题:

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

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

2 个答案:

答案 0 :(得分:1)

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

对Scott Hanselman博客的这一解释为您提供了所需信息 - Forcing an update of a cached JavaScript file in IIS

此页面还为"If-Modified-Since" HTTP Header

提供了有用的入门读物

答案 1 :(得分:0)

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

快速查看,以确保您的IIS服务器上的输出缓存正在更新。更改让我们将其设置为" 缓存直到更改"。 我读到你每周都要清除它,但如果事情没有改变......为什么? enter image description here

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

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

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

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"))

您可以将其包装在&#34;会话中(&#34; AUTH&#34;)&#34;如果您的网站设置了登录和成员会话。 除此之外,只有在Session(&#34; EditedPageFullRUL&#34;长度大于1)时才会触发。

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

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