0

大きなSharePointプロジェクトに統合する小さなSharePointプロジェクトがあります。私のプロジェクトには、いくつかのjavascriptファイルと画像(CSS経由)があります。アプリ(javascriptまたは画像、あるいはその両方)を更新するときはいつでも、Ctrl + F5(強制更新)を明示的に実行して最新バージョンを取得する必要があります。キャッシュされている古いデータがユーザーに表示されています。このアプリケーションは何百人ものユーザーによって使用されており、Ctrl+F5を実行するようにすべてのユーザーに指示することはできません。

プロジェクトのキャッシュを完全に無効にするにはどうすればよいですか?

4

1 に答える 1

2

実際のhtmlをラップするスクリプト/画像/css参照用のサーバー/ユーザーコントロールを作成できます。コントロールは、ユーザーがページをリクエストするたびに、script/css/image 参照のそれぞれにランダムなクエリ文字列を追加します。あなたの参照は次のようになります:

/_layouts/1033/styles/Themable/Menu.css?rev={ランダム 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();
}
于 2012-04-24T18:03:03.923 に答える