我有一个小型的SharePoint项目集成到一个更大的SharePoint项目。我的项目有几个JavaScript文件和图像(通过CSS)。每当我更新应用程序(JavaScript或图像或两者),我需要明确做一个Ctrl + F5(强制刷新)来获取最新版本。用户在缓存时会看到旧数据。这个应用程序正在被数百个用户使用,我不能告诉他们每个人都做一个Ctrl + F5。Sharepoint 2010项目 - 禁用缓存
如何为我的项目禁用缓存完全?
我有一个小型的SharePoint项目集成到一个更大的SharePoint项目。我的项目有几个JavaScript文件和图像(通过CSS)。每当我更新应用程序(JavaScript或图像或两者),我需要明确做一个Ctrl + F5(强制刷新)来获取最新版本。用户在缓存时会看到旧数据。这个应用程序正在被数百个用户使用,我不能告诉他们每个人都做一个Ctrl + F5。Sharepoint 2010项目 - 禁用缓存
如何为我的项目禁用缓存完全?
您可以创建一个服务器/用户控件,用于包装实际HTML的脚本/图像/ css引用。每次用户请求页面时,控件都会为每个脚本/ css /图像引用添加随机查询字符串。你引用的将是这样的:
/_layouts/1033/styles/Themable/Menu.css?rev={insert随机GUID}
这会导致浏览器每次重新加载该文件。
但是,为什么要删除缓存,因为这样可以缩短用户页面的加载时间?您可以轻松使用我拥有的示例,而不是生成随机guid,它会基于当前文件的散列生成guid。这样它只会强制用户更新文件,如果它真的改变。或者,更好的是,SharePoint已经有SPUtility.MakeBrowserCacheSafeLayoutsUrl
,您可以使用它来创建将被正确缓存的网址。下面是一个例子
的HTML母版页(RelativeUrl是在 “C:\ Program Files文件\ Common Files文件\ Microsoft共享\ Web服务器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();
}
我想删除缓存,因为有时用户看到我的文件(javascript,图像)的过时版本。有没有其他方法可以禁用缓存而不将随机字符串附加到URL? – tempid 2012-04-24 18:24:52
如果您使用SPUtility.MakeBrowserCacheSafeLayoutsUrl来生成您的URL,那么您只需要回收应用程序池以避免用户必须查看过时的文件版本。我知道的唯一的其他选项是关闭IIS中Web应用程序上某些文件扩展名的缓存。你可以使用输出缓存和缓存规则来做到这一点。 – skeletank 2012-04-24 18:28:38
感谢您的示例用户控制。我还会研究'SPUtility.MakeBrowserCacheSafeLayoutsUrl'。 – tempid 2012-04-24 18:44:05
你在哪里引用你的脚本?他们是否添加了用户控件的代码或是他们在.aspx页面上的脚本标记? – skeletank 2012-04-24 17:48:21
它们在ASPX页面的脚本标记中。 – tempid 2012-04-24 18:22:32
最后一件事。您应该重申您的问题以包含[sharepoint]。有更多的问题标签,这会增加您获得其他答案的机会。 – skeletank 2012-04-24 18:53:15