web-dev-qa-db-ja.com

ブラウザでキャッシュ/ブラウザデータを強制的にクリアする方法は?

シナリオ:古いJoomlaをアップグレードしました! 2.5からJoomla!の最新バージョンまでのWebサイト。そうした後、私の視点から見たサイトは、本来あるべき姿に見えます。アップグレード前に以前にサイトにアクセスしたことがある別のPCからサイトにアクセスしようとすると、CSSは古くなっているようです。

解決策:これを修正するために、ブラウザを介してキャッシュとすべての閲覧データをクリアし、問題を修正します。

防止策:カスタムコンポーネントを確認しましたが、キャッシュ保存メカニズムがないため、 guessこれはブラウザ側の問題です。問題は、これが今後発生しないようにするにはどうすればよいですか?

理由:以前のユーザーがサイトにアクセスした場合、すべてが悪く見え、キャッシュを更新する必要があることをユーザーに知らせることはできません。

研究:

Joomlaのバージョン管理を確認しました( https://www.joomlart.com/tutorials/joomla-tutorials/tutorial-how-to-enable-content-versioning-in-joomla-site

キャッシュのクリアを確認しました( https://forum.joomla.org/viewtopic.php?t=949662

具体的な解決策はないようです。

このような状況に「ベストプラクティス」がある場合は、ぜひ共有してください。

4
Nick

私は何度も何度も同じ問題に直面しました。その間、私はブラウザにそのキャッシュをクリアすることを強制するバージョニングアセットのロードによってのみできることを学びました。そのため、テンプレートがCSSファイルをロードする場所を見つけ、ロードコマンドの最後に"?v = xxx"のようなバージョンの文字列を追加する必要があります。ブラウザが以前のバージョンの文字列をキャッシュしたら、バージョン番号を大きくして変更するだけで、そのアセットを簡単に強制的に再ロードできます。

それは私が知っている「ベストプラクティス」にすぎません。これまでこの手順を自動化できるシステムプラグインはないため、アセットをロードする対応するテンプレートの.phpファイル(通常はある種のindex.php)を編集して手動で実行する必要があります。

非常に同じトリックを.jsファイルのリロードにも使用できますが、それらはあなたの質問や懸念の一部ではありません。

4
Mikan

mediaVersionを使用できます。それにはいくつかの方法があります。それらを見てください2:

ロードされたファイルに手動でバージョンを追加する:$v = JFactory::getDocument()->getMediaVersion()

JHtmlロードされたファイルのバージョン管理:

// Add script
JHtml::_('script', 'xxx.js', array('version' => 'auto'));
// Add Stylesheets
JHtml::_('stylesheet', 'xxx.css', array('version' => 'auto'));
3
Alexandr

クライアントブラウザのキャッシュを確実に無効にする唯一の方法は、問題のアセットの名前を変更することです。すべてのブラウザに強制的にダウンロードさせます。

1
Seth Warburton

JCH Optimizeを使用すると、CSSとJavaのすべてのスクリプトファイルの配信を組み合わせて最適化できます。プラグインのキャッシュをクリアすると、結合された各ファイルに新しい名前が付けられます。

私は常にPROバージョンを使用しています。これは非常に効果的で、すべてのお金の価値があります。

1
KlintWeb

ファイルがキャッシュされないように、ファイルのタイムスタンプをパラメータとして追加します。

$mtime = filemtime('/path/to/script/script.js');
JFactory::getDocument()->addScript('/url/of/script/script.js?t='.$mtime);
1
Nagarjun