2

多くの JavaScript を使用する .NET Web アプリケーションがあります。.aspx ファイルと .js ファイルは密接に関連しています。問題: .aspx ファイルはクライアント上で常に最新の状態になっています (キャッシュされていません) が、.js ファイルはキャッシュされている可能性があります。ユーザーが私のサイトで何時間も費やしており、.aspx/.js ペアを更新するたびにユーザーが問題に遭遇するため、ファイルが 1 つのセッションに対してのみキャッシュされる場合でも、これは問題です。

今、解決策を見つけましたが、おそらくより良い解決策があるかどうか、または私の解決策にパフォーマンス上の欠点があるかどうかはわかりません。

これが私の解決策です:

.aspx の .js-参照:

<script type='text/javascript' src='../scripts/<%# GetScriptLastModified("MyScript.js") %>'></script>

したがって、「GetScriptLastModified」は次のように ?v= パラメータを追加します。

protected string GetScriptLastModified(string FileName)
{
  string File4Info = System.Threading.Thread.GetDomain().BaseDirectory + @"scripts\" + FileName;
  System.IO.FileInfo fileInfo = new System.IO.FileInfo(File4Info);
  return FileName + "?v=" + fileInfo.LastWriteTime.GetHashCode().ToString();
}

したがって、レンダリングされた .js-Link は、クライアントには次のように見えます。

<script type='text/javascript' src='/scripts/GamesCharts.js?v=1377815076'></script>

新しいバージョンをアップロードすると、リンクは毎回変更されます。変更すると、ユーザーは新しいスクリプトまたは画像をすぐに取得できます。

4

3 に答える 3

2

Safari は、クエリ パラメータを含む URL をキャッシュすることを拒否します。したがって、クエリ パラメーターの代わりに、バージョン管理されたパスなどを使用し、mod_rewrite を使用してそれを削除できます。

何かのようなもの:

<script type='text/javascript' src='/scripts/1377815076/GamesCharts.js'></script>

そして、Apache構成ファイル(宿題として残されている他のサーバーの構成):

RewriteEngine On
RewriteRule  ^/scripts/[0-9]+/(.+)$    /scripts/$1
于 2010-09-22T07:03:05.690 に答える
2

この環境で行うことは、呼び出し元のスクリプトでカウンターを手動で増やすことです。

<script type='text/javascript' src='/scripts/GamesCharts.js?v=1'></script>

js ファイルが更新されるたびに、カウンターをインクリメントします。

<script type='text/javascript' src='/scripts/GamesCharts.js?v=2'></script>

メソッドは自動的に機能しますが、スクリプトが呼び出されるたびに LastWriteTime を取得する必要があります。トラフィックの多いサイトの場合、CPU 処理が増加します。

于 2011-06-03T10:53:29.210 に答える
0

考えてみてください:おそらく、JS を ASPX としてレンダリングすることができます。以前にJSPを使用してCSSを強制的にリロードするためにこれを行いました。そのソリューションを誇りに思っているわけではありませんが、以前は機能していました。

<script type='text/javascript' src='/mycode/GamesCharts.js.aspx'></script>

次に、JS を ASPX ファイルで静的にレンダリングします。

于 2010-09-22T06:50:32.927 に答える