Sharepoint 2010项目 - 禁用缓存

时间:2012-04-24 17:27:36

标签: caching sharepoint-2010

我有一个小型SharePoint项目,它集成到一个更大的SharePoint项目中。我的项目有几个javascript文件和图像(通过CSS)。每当我更新应用程序(javascript或图像或两者)时,我需要显式执行Ctrl + F5(强制刷新)以获取最新版本。用户在缓存时会看到旧数据。这个应用程序正被数百名用户使用,我不能告诉他们每个人都做一个Ctrl + F5。

如何为项目禁用完全的缓存?

1 个答案:

答案 0 :(得分:2)

您可以为包装实际html的脚本/图像/ css引用创建服务器/用户控件。每次用户请求页面时,控件都会为每个脚本/ css / image引用添加一个随机查询字符串。你的参考就像:

  

/ _ layouts / 1033 / styles / Themable / Menu.css?rev = {insert random guid}

这会导致浏览器每次都重新加载文件。

但是,为什么要删除缓存,因为这会改善用户页面的加载时间?您可以轻松地使用我拥有的示例,而不是生成随机guid,它将根据当前文件的哈希生成一个guid。这样它只会强制用户在文件实际更改时更新文件。或者,更好的是,SharePoint已经有SPUtility.MakeBrowserCacheSafeLayoutsUrl,您可以使用它来创建将正确缓存的URL。这是一个例子

母版页中的Html(RelativeUrl位于“C:\ Program Files \ Common Files \ Microsoft Shared \ Web Server Extensions \ 14 \ TEMPLATE \ LAYOUTS”下)

<MyControls:CacheSafeScriptLinkControl RelativeUrl="MyFeature/js/core.js" 
  runat="server" />

服务器控制

protected override void CreateChildControls()
{
  string cacheSafeUrl = 
    SPUtility.MakeBrowserCacheSafeLayoutsUrl(RelativeUrl, false);

  ScriptLink scriptLink = new ScriptLink
  {
    Language = "javascript",
    Localizable = false,
    Name = cacheSafeUrl,
    Version = 4
  };

  Controls.Add(scriptLink);

  base.CreateChildControls();
}