6

Web アプリがあるとします。それにいくつかの機能を追加しますが、これらの機能を使用するには、Web サーバー上の既存の CSS ファイルに追加する必要があります。新しい機能と CSS の追加をサーバーにデプロイしましたが、うまく機能しています。ただし、サイトにアクセスするユーザーは、おそらくブラウザーにキャッシュされた CSS を持っているでしょう。つまり、ページを手動で更新するか、キャッシュが期限切れになるまで、新しい機能は壊れているか、奇妙に見えます。サーバーとユーザーの間にキャッシュサーバーがある場合、問題はさらに悪化する可能性があります。その場合、手動で更新しても役に立ちません (私は思いません)。

これを回避する一般的な方法はありますか?

編集: ASP.NET 4.0 で実行しています。

4

4 に答える 4

7

CSS リクエストの末尾に任意の名前と値のペアを追加すると、キャッシュされていないかのように動作します。例えば:

<link media="all" href="myhomepage.css?sid=1" type="text/css" rel="stylesheet">

変更するときは、sid 値を変更します。

于 2012-06-29T19:05:46.843 に答える
2

私は Apache の PHP で以下を使用します。

function cssInclude($file) {
    $fileMTime = filemtime($_SERVER['DOCUMENT_ROOT']."/media/css/".$file.".css");
    return "<link rel=\"stylesheet\" href=\"/media/css/{$file}.{$fileMTime}.css\"
}

次に、私の<head>

<?= cssInclude("style"); ?>

次に、.htaccess で:

RewriteEngine on
RewriteRule ^media/(js|css|img|font)/(.+)\.(\d+)\.(js|css|png|jpg|gif)$ /media/$1/$2.$4 [L]

基本的にこれが行うことは、リンクに時間を持たせることです。もともと私は CSS の後に ? のように ? を使用してそれを行いstyle.css?12313123ましたが、一部のプロキシは動的であると想定してそれをキャッシュせず、遅くなることがわかりました (たとえば、私の仕事はそれを台無しにしました)。

style.123123123.css変更されるたびに新しいファイルのように見えるように書き込むことで、キャッシュが正常に機能します。

私の .htaccess では、さまざまなディレクトリやいくつかの異なるファイル形式に対しても、必要に応じてカスタマイズできるようになっていることに気付くでしょう。

もちろん、これはファイルシステムから何かを読み取っていることを意味しますが、キャッシュ層が配置されている場合、これは更新ごとに 1 回だけ行われます。

于 2012-06-29T19:06:26.603 に答える
1

もちろん、あなたがそれについて言及していないので、私はあなたのセットアップを知りませんが、Tomcatのようなserletコンテナを持っていると仮定して、Jawrを見てみることをお勧めします。その目的は、Webサイトから:'JawrはJavascriptとCSS用の調整可能なパッケージソリューションです…'</ p>

それはあなたが要求したことよりもはるかに多くのことを行うことができますが、@scrappedcolaのアイデアを完全に自動的に実装します。scripts_A5F68E2.jsクライアントには、キャッシュのプロパティがeternityに設定されているコンテンツのハッシュ(のようなもの)を含むURLが表示されます。内容が変わるたびに名前も変わるので、クライアントはスクリプトを新たにロードします。

于 2012-06-29T20:15:08.293 に答える
1

まず、ロードするリソースにバージョンを追加するのが一般的な方法です。これは、バージョン パラメータまたは yawr などのフレームワークを使用して行うことができます。

最初のものを好み、バージョン管理を使用する場合は、vcs リビジョン文字列をバージョンとして使用するか、リリース サイクルを行う場合は、変更に最適なバージョンを使用することをお勧めします。

PHP または Python では、バージョン文字列を含むファイルを生成し、必要なすべてのファイルで参照できます。Java または .NET では、コンパイル済みのアーティファクトを配置したい場合があります。

セットアップが欠落しているため、サンプルコードは貼り付けません。

于 2012-06-29T20:31:01.360 に答える