4

ページの開発中にいつも気になる問題に気づきました。Firefox(私の一般的な「開発」ブラウザ)はサーバー上で変更されたときにCSSと画像を常に更新しますが、InternetExplorerは常にこれを行うとは限りません。通常、サーバーに更新されたバージョンを要求する前に、IEでページを更新する必要があります。

私が理解しているように、ブラウザは少なくともリクエストごとにすべてのサーバー側オブジェクトのタイムスタンプをチェックし、必要に応じてクライアント側でそれらを更新することになっているのではないでしょうか。強制することはできませんが、特定のアイテムに対してこれを行うようにブラウザに「促す」方法はありますか?

私がここで抱えている主な問題は、CSSが特定の方法で初期化されることに依存するJavaScriptがページにあることです。その逆も同様です。一方が更新され、もう一方が更新されない場合(両方が独自の外部ページにある場合、IEでは非常に一般的です)、混乱が生じ、ページにときどきスプラッタが発生します。「ページの更新」ダンスを自分で行うことはできますが、サイトでスクリプトを作成するときに、ユーザーに「ページの更新など」を勧める必要はありません。

アドバイスをいただければ幸いです。ページ自体は問題なく更新されるので(PHPです)、最悪のシナリオでは、CSSとJavaScriptをページ自体に吐き出すことができますが、それは本当に醜いです。もちろん、絶対に避けようとしています。

4

7 に答える 7

10

クライアントが外部のJavaScriptとCSSを1回だけフェッチする必要があるようにサイトを設計することをお勧めします。

1年後に有効期限が切れる外部リソースを設定します。各ファイル名にバージョン番号を追加するため、「」の代わりに「style.css」を使用style-1.2.4.cssし、クライアントのCSSを更新する場合は、バージョン番号をインクリメントします。

バージョン番号を増やすと、完全に別個のリソースと見なされるため、クライアントは更新されたファイルをダウンロードする必要があります。

于 2009-05-31T15:19:37.270 に答える
3

すべてのURLの最後に少しランダムなクエリ文字列を追加します。醜いですが、開発時に機能します。例えば:

<link rel="stylesheet" type="text/css" href="/mycss.css?foo=<?php echo rand(); ?>"/>

スクリプトや背景画像などにも同じことができます(サイトが公開されたら、これらを削除することを忘れないでください;))

于 2009-05-31T15:15:56.950 に答える
3

これは、ファイルが頻繁に変更される開発中の問題にすぎません。サイトを公開すると、訪問者は現在のバージョンを取得し、キャッシュメカニズムは多かれ少なかれあなたが望むことを行います。

サイトの動作を変更するのではなく、開発中に更新する前にキャッシュをクリアする習慣を身に付けました。Firefoxでは、あなたが言ったように、これは通常問題ではありませんが、本当に確認する必要がある場合は、Shift + Ctrl + Delを使用してEnterキーを押します(プライベートデータのクリア設定では[キャッシュ]のみがオンのままになります)。IEでは、古いShift+F5があります。

もちろん、他の人が言及しているように、揮発性ファイルのランダムなクエリ文字列を使用すると、いくつかのキーストロークを節約できます。ただし、これは実際にはあなた自身の便宜のためであり、生産現場では実際には必要ないことを理解してください。

于 2009-05-31T15:19:05.337 に答える
2

最後に変更されたタイムスタンプをソースの最後に GET-data として配置すると、キャッシュ エラーが発生しないことが保証されます。

ページが遅くなるため、キャッシュを完全に削除するのはばかげています。

于 2009-05-31T15:25:32.937 に答える
1

Apacheを使用している場合は、そのcssファイルの.htaccessで次のようにします。

<FilesMatch "mycssfile\.css$">
  Header set Cache-Control: "private, pre-check=0, post-check=0, max-age=0"
  Header set Expires: 0
  Header set Pragma: no-cache
</FilesMatch>
于 2009-05-31T15:19:33.323 に答える
0

DanHerbert の方法を少しひねりました。私はスタイルシートに同じ名前を使用する傾向がありますが、クエリ文字列にバージョン番号を付けて、バージョンを増やすことを選択するたびにブラウザーがファイルを異なるものとして認識するようにします。物事は引き続きキャッシュされますが、選択して無効にすることができます。

これは、ファイル名を変更するよりも少しクリーンであり、特に 4 つの風から来る多くのスクリプトとスタイルシートを含む複雑なアプリで、一元管理されたソリューションになるのに適しています.

于 2009-05-31T21:50:39.037 に答える
0

ブラウザは通常、サーバーからの指示に従って内部キャッシュにページを保存します。いいえ、最後のチェックに基づいて有効期限が切れていないように見える場合、ファイルをリロードする必要はありません。もちろん、リロードを押すと、メイン ページが明示的にリロードされますが、js とスタイルに関する動作は異なる場合があります。

まさにその理由で、開発->キャッシュを無効にするメニューがあるSafariで開発しています。Firefoxにも似たようなものがあると確信しています。

于 2009-05-31T21:35:20.940 に答える