web-dev-qa-db-ja.com

Joomlaの組み込みのキャッシュ無効化手法をスクリプトとスタイルシートに使用するにはどうすればよいですか?

JHtml :: script および JHtml :: stylesheet には、明確に文書化されていないように見えるキャッシュ無効化テクニックがあります。どうすれば使用できますか?

4
Flimm

はい、組み込みのキャッシュ無効化テクニックがあります。これを使用すると、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)を含むディレクトリにMD5SUMnotMD5SUMS)という名前のファイルが含まれていることを確認します。このファイルには、?を使用して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にはファイル名と改行が含まれていますが、それでも関係なく機能するはずです。)

4
Flimm