2

T4MVC には、url ファイルの最終変更時刻に追加する設定 AddTimestampToStaticLinks があります。

/Content/nerd.jpg?2009-09-04T12:25:48

頻繁に変更されるファイルはブラウザによってキャッシュされないため、開発中に非常に便利です。しかし、本番用に保持する必要がありますか? どのくらい遅いですか?それがどのように機能するのかさえわかりません。「/Content/nerd.jpg?2009-09-04T12:25:48」を「/Content/nerd.jpg」に変換する魔法をかけたのは誰ですか? IIS モジュールの一部?

4

1 に答える 1

2

本番用に保管する必要がありますか?

はい。これにより、開発で得られるのと同じ利点がユーザーにもたらされます。

どのくらい遅いですか?それがどのように機能するかさえわかりません。

タイミングはありませんが、おそらくあなたの目的にとっては無視できるほど速いでしょう。実際のファイルの最終更新日をチェックし、ティック数の差のハッシュを生成し、文字列連結を使用してそれを URL に追加します。t4 テンプレートは単なるテキスト ファイルであるため、自分で調べることができます。そのためのコードは、私が持っているバージョンでは次のようになります。

static DateTime CenturyBegin=new DateTime(2001,1,1);
public static string TimestampString(string virtualPath) {
    if (!HostingEnvironment.IsHosted) return string.Empty;
    string filePath = HostingEnvironment.MapPath(virtualPath);
    return Convert.ToString((System.IO.File.GetLastWriteTimeUtc(filePath).Ticks-CenturyBegin.Ticks)/1000000000,16);            
}

目的に対して十分に高速でない場合は、タイムスタンプを追加するメソッドを変更して、十分に高速にすることができます。アセンブリのビルド番号や、ビルド プロセスで手動で変更するものなど、精度は低くても高速な方法があります。ただし、デフォルトのままにしておくと、変更されたファイルのみキャッシュが無効になります。

「/Content/nerd.jpg?2009-09-04T12:25:48」を「/Content/nerd.jpg」に変換する魔法をかけたのは誰ですか?

HTTP では、任意の要求にクエリ文字列を追加できます。ほとんどのサーバー実装は、静的ファイルのクエリ文字列を単純に無視しますが、異なるクエリ文字列を個別の要求として扱うため、更新が行われるとすぐに取得されます。

ファイルを変更しなくても、url + クエリ文字列をクライアントがキャッシュしていないものに変更するだけで、ブラウザーに強制的にコンテンツをリロードさせることができます。

于 2011-08-20T12:02:44.843 に答える