JHtml :: script および JHtml :: stylesheet には、明確に文書化されていないように見えるキャッシュ無効化テクニックがあります。どうすれば使用できますか?
はい、組み込みのキャッシュ無効化テクニックがあります。これを使用すると、HTMLは次のようになります。
<script src="/media/path/foo/bar.js?32af2f62db6e60053132340acc9dfb3c" type="text/javascript"></script>
これは、ファイルが変更されるたびに、URLクエリセクションに異なる一連の文字を追加することで機能します。このように、ブラウザはこれまでに見たことのないこのURLのキャッシュされたエントリを持たず、再度フェッチする必要があります。 Joomlaとサーバーは、静的ファイルの提供に関して、URLのクエリ部分を無視するようにすでに構成されています。
使用方法は次のとおりです。
JHtml::_("script", "path/foo/bar.js");
または:
JHtml::_("stylesheet", "path/foo/bar.css");
(addStyleSheet
およびaddScript
を使用するとnotが機能することに注意してください。代わりにJHtml::script
およびJHtml::stylesheet
を使用する必要があります。)
次に、ファイル(path/foo
)を含むディレクトリにMD5SUM
(notMD5SUMS
)という名前のファイルが含まれていることを確認します。このファイルには、?
を使用してURLに追加される文字が含まれます。 MD5SUMチェックサムである必要はなく、何でもかまいませんが、そのディレクトリ内のファイルのチェックサムが含まれていることが意図されています。悲しいことに、そのディレクトリ内のファイルごとに個別のチェックサムを設定する方法はありません。この手法でキャッシュ無効化を機能させるには、そのディレクトリ内のすべてのファイルのチェックサムを変更する必要があります。
コマンドラインのLinuxで作成する方法は次のとおりです。ビルドスクリプトに次のようなものを追加する必要があります。
cd path/foo
find . -maxdepth 1 -type f -not -name MD5SUM -exec md5sum "{}" ";" | sort | md5sum > MD5SUM
これにより、そのディレクトリ内の各ファイルのMD5SUMチェックサム(フィードバックループを回避するためにMD5SUMを除く)が作成され、MD5SUMがその出力をすべて1つの最終的なMD5SUM
ファイルにまとめます。
(デフォルトでは、コマンドmd5sum
にはファイル名と改行が含まれていますが、それでも関係なく機能するはずです。)