我有一個小型的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