2017-01-11 11 views
0

開発者として私たちはすべてこの問題を抱えていました。ウェブサイトのメンテナンスが必要で、クライアントスクリプトがあります:foo.jsfoo.jsを変更してテストし、テスト環境上の新しいコード。 テストユーザーは、ブラウザに古いfoo.jsがキャッシュに保持されているため、問題を解決しなかったと主張します。ブラウザのJavaScriptキャッシングの問題を防ぐためのベストプラクティス

私はfilecontentsのハッシュを作成し、それをファイル名に使用することを考えていました。 foo_8c736521.js ハッシュを作成してファイルの名前を変更してBundleConfig.csを更新できます。 これはVisual Studio内で自動的に実行されます。

C#.NETでこれを処理するライブラリがありますか?

私は私のweb.Test.configファイルにこの変換を追加しました:今、バンドルの最適化は、この環境で有効になっている

<system.web> 
     <compilation debug="false" targetFramework="4.5" xdt:Transform="Replace" /> 
    </system.web> 

。そして、それは動作します。

+1

foo.jsはを参照してください常に取得するには、ブラウザを強制するV = aabilio

+0

@aabilio?キャッシュメカニズムを効果的に無効にします。私は、実際のファイルの内容が変更されたときにのみキャッシュを無効にしたい。 –

+0

ああ、私は質問を理解していませんでした。したがって、サーバーを制御する場合は、EtagまたはLast-Modified HTTPヘッダーを使用します。 – aabilio

答えて

2

ASP.NETバージョン4.5以上を使用している場合は、組み込みのJS Bundlerを使用してください。バンドルに含まれるJSファイルの変更を追跡し、ファイルが変更されたときにのみ新しいハッシュを発行します。 MVCのために

public class BundleConfig { 
    public static void RegisterBundles(BundleCollection bundles) { 
     bundles.Add(new ScriptBundle("~/bundles/custom").Include(
      "~/Scripts/foo.js", 
      "~/Scripts/bar.js" 
     )); 
    } 
} 

- Global.asaxの中でバンドルを登録します。

protected void Application_Start() { 
    // ... 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 

ASP.NET - Bundling and Minification

+0

これは既にプロジェクトに実装されています。私は、バンドルの最適化を可能にするために、テスト環境web.configでdebug = "false"オプションを設定するだけでした。 –

+0

'debug =" true "'を開発環境で使用すると、スクリプトのデバッグを容易にするためのバンドルと縮小を無効にすることができます。 –

関連する問題