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>
4

1 回答 1

7

Web 资源(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 设置为从创建 bundle 起一年,并在查询字符串中添加一个附加参数。只要捆绑包没有改变,这个唯一标识符就会是相同的。见这里

在浏览器上

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

  • :Shift + 重新加载按钮
  • IE:Ctrl + F5 或 Ctrl + 重新加载按钮
  • Firefox:Ctrl + Shift + R 或 Shift + 重新加载

还有很多方法可以完全禁用浏览器上的缓存。

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

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

于 2013-06-06T15:37:25.860 回答