1

重複の可能性:
ブラウザでJavaScriptファイルを強制的に更新するにはどうすればよいですか?

ASP.NET MVCベースのファイルとjavascriptファイルのアプリケーションは、.csHtmlファイルに含まれています。

これが必要なのは、ユーザーが[Ctrl + F5]を実行したり、手動でキャッシュをクリアしたりする必要がなく、最新バージョンのjavascriptファイルがブラウザーに毎回読み込まれるためです。

いくつかの例を提供できれば幸いです。

推奨される主な手法は、ファイルを含めるときにダミーのパラメーターを使用することです。また、jsファイルを変更するたびにパラメータを手動で変更する必要はありません。これを自動的に実行できる場合は、いくつかの例が必要です。

編集1:ASP.NETMVCプロスペクティブでこれに対する解決策を提供してください。

4

4 に答える 4

1

JSファイルのファイル名にバージョン番号を入力します(jQueryのように)。次に、JSファイルを改訂するたびに、バージョンをバンプして、それを含むHTMLファイルを変更します。

jQueryファイルの命名例:

jquery-1.8.3.js
jquery-1.9.0.js

これにより、JSファイル自体に対してサーバーに非常に長いキャッシュを設定でき、サイトのパフォーマンスに非常に役立ちます。ただし、JSファイルを回転させると、ビューアはすぐに新しいJSファイルを取得します。これは、新しく名前が付けられたファイルがブラウザのキャッシュにないために新しいHTMLファイルによってプルされるためです。

于 2013-01-27T04:02:18.690 に答える
0

バンドルとミニファイを使用したい。MVCのバージョンによって、実装は少し異なります。最新バージョンでは、デフォルトで使用されます。

バンドルとミニファイは、すべてのスクリプト(およびスタイルシート)を1つのファイル(または使用方法によっては複数)に結合してミニファイし、一意のパラメーターを使用して提供します。その特定のバンドルでファイルが変更されると(したがって、ユーザーは新しいファイルをダウンロードする必要があります)、パラメーターは自動的に変更されます。

MVC3の場合、 MicrosoftWebOptimizationをインストールする必要があります。

次に、global.ascxで、次のようなことを行い、次の場所から呼び出しますApplication_Start

private static void SetupBundling()
{
     var jsBundle = new Bundle("~/Scripts/js", typeof(JsMinify));
     jsBundle.AddDirectory("~/Scripts/", "*.js", false);
     jsBundle.AddDirectory("~/Scripts/anothr-good-folder/", "*.js", false);
     BundleTable.Bundles.Add(jsBundle);

     var randomBundle = new Bundle("~/Scripts/random", typeof(JsMinify));
     randomBundle.AddFile("~/Scripts/random/main.js");
     randomBundle.AddFile("~/Scripts/random/cool.js");
     BundleTable.Bundles.Add(randomBundle);

     var cssBundle = new Bundle("~/Content/css", typeof(CssMinify));
     cssBundle.AddDirectory("~/Content/", "*.css", false);
     BundleTable.Bundles.Add(cssBundle);
}

そのため、最初のバンドルはフォルダ内のすべての.jsファイルをバンドルし~/Scriptsます。ヘッドファイルでは、次のように参照できます。

<script src="@Microsoft.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")" type="text/javascript"></script>

そしてそれは次のようにレンダリングされます:

<script src="/Scripts/js?v=-2573834892993289" type="text/javascript"></script>

また、.jsファイルの1つが変更されると(または.css)、パラメーターも変更されます。

randomBundleCSSバンドルの同様の実装であり、特定のページでのみ参照する場合も同様です。

于 2013-01-27T04:14:14.147 に答える
0

次のように、各 JavaScript ファイル URL の後にランダムなハッシュまたは数値 URL パラメーターを追加することで、キャッシュ無効化を行うことができます。

http://www.bestsiteonearth.yes/cool_javascript.js?cache_buster=2187sasas1289012890aohkjaiosa0990

その数はページが読み込まれるたびに異なるため、URL はキャッシュされません。詳細はこちら。チュートリアルでは PHP の例を示しますが、任意の言語でハッシュまたは乱数を作成する方法を知っていて、それを URL に添付できる場合は、問題ありません。

于 2013-01-27T04:04:38.983 に答える
0

個人的に私は PHP を使用していますが、これを行う方法は、出力バッファーで画像、スクリプト、スタイルシート (およびオーディオ、ビデオなど) などの静的ファイルを検索し、ファイルシステムからそれらの変更時刻を取得して として追加すること/t=TIMESTAMPです。次に.htaccess、タイムスタンプを取り除き、元のファイル名を取得します。多くのクライアントはクエリ文字列を含むファイルをキャッシュしないため、これはクエリ文字列よりも優先されます。また、ファイルを変更するだけで自動的に更新されるため、バージョン管理よりも優先されます。

于 2013-01-27T04:10:26.067 に答える