自动刷新浏览器缓存

7

我之前从未遇到过这种问题,如果我的表述有些无知,请谅解。

我的基本问题是,在 Visual Studio 2010 中工作时,我所做的任何更改似乎都被缓存了。

例如,我会对一个页面进行更改,运行解决方案,然后我必须按 Ctrl + F5 强制刷新缓存才能看到更改。这适用于 ASP.NET/HTML/CSS 和 JavaScript 代码。同样道理。

过去,Visual Studio 每次运行都会清除缓存,所以我有点失望。

此外,当我将解决方案部署到 IIS 服务器时,用户也会遇到相同的问题。即使 ASP.NET 页面进行了更改,用户仍然会拉取缓存版本,直到他们清除缓存。我通过为文件(特别是 JavaScript)重命名并添加版本号来减轻这个问题,这样客户端总是会把它们视为新文件并加载,而不是从缓存中加载。

是否存在 Visual Studio 或 web.config 中的任何设置可能导致这种情况?

编辑:这是我的 web.config 文件

<configuration>
  <system.web>
    <sessionState cookieless="UseCookies" timeout="1440" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxx"/>
        <add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxx"/>
        <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxx"/>
      </assemblies>
    </compilation>
    <authentication mode="Windows"/>
    <pages>
      <controls>
        <add tagPrefix="ajaxtoolkit" namespace="AjaxControlToolkit" assembly="AjaxControlToolKit"/>
      </controls>
    </pages>
  </system.web>
  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="50000000"/>
      </webServices>
    </scripting>
  </system.web.extensions>
</configuration>
1个回答

6
网页资源(CSS、JS、图片甚至HTML)需要时间才能通过网络下载,这增加了加载网页所需的时间(Steve Souders认为这占了近80%,请参见此处)。HTTP缓存允许浏览器或代理保存(或缓存)这些资源。一旦资源被缓存,浏览器或代理就可以引用本地缓存副本,而不必在随后访问网页时再次下载它。
浏览器缓存可以通过HTTP缓存标头进行控制(请参见此处的快速概述)。
因此,这并不是因为Visual Studio或ASP.NET,而是因为浏览器。
希望有很多方法可以在服务器端(仅用于测试目的)或客户端上(重新加载和绕过缓存)禁用缓存。
以下是一些可能性: 使用ASP.NET 您可以使用以下代码明确禁用浏览器缓存:
// Stop Caching in IE
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

// Stop Caching in Firefox
Response.Cache.SetNoStore();

警告:仅限于本地测试目的!

此外,许多捆绑系统允许您控制缓存设置。ASP.NET MVC Bundles 将HTTP Expires Header 设置为从创建捆绑包开始的一年,并在查询字符串中添加一个附加参数。只要捆绑包不发生更改,此唯一标识符将是相同的。请参见这里

在浏览器上

有许多快捷方式可以重新加载页面并绕过缓存:

  • Chrome:Shift + Reload 按钮
  • IE:Ctrl + F5 或 Ctrl + Reload 按钮
  • Firefox:Ctrl + Shift + R 或 Shift + Reload

还有许多完全禁用浏览器缓存的方法。

  • IE:工具 ‣ Internet 选项 ‣ 临时互联网文件 ‣ 设置 ‣ 检查是否有新版本的存储页面
  • Chrome:工具 ‣ 开发人员工具 ‣ 左下角的齿轮图标 ‣ 禁用缓存
  • Firefox:工具 ‣ 选项 ‣ 高级 ‣ 网络 ‣ 缓存大小 = 0

维基百科有一个很好的列表


这是一个很好的答案!我能够在Internet Explorer中找到设置,实际上是设置为从不查找页面的新版本。 - yoshi0423

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接