web-dev-qa-db-ja.com

スタイルシートの切り替えとキャッシュ

私はユーザーがスタイルシートを切り替えることを可能にするサイトを実装しています(視覚障害を持つ人々のためにハイコントラストバージョンを表示するために)。スイッチャーは基本的に<link>refを適切なスタイルシートに変更するだけです。

ただし、キャッシュをオンにすると(WP SupercacheまたはW3 Total Cacheのいずれかを使用)、ページの1つのバージョンのみがキャッシュされてユーザーに表示されるため、問題が生じることがわかりました。

考えられる解決策についての考えは?

3
anu

答えはかなり単純です(少なくともWP Supercacheの場合)。

  1. PHPまたはレガシーキャッシングを使用します(つまり、mod_rewriteは使用しません)。
  2. 遅い初期化を有効にします(UIから - 推奨、または$wp_super_cache_late_init = 1;wp-content/wp-cache-config.phpを設定することによって)
  3. 動的なままにする必要があるコンテンツをラップするには、<!--dynamic-cached-content-->ディレクティブを使用します。

例:

<!--dynamic-cached-content--><?php
    display_high_contrast_link();
?><!--
   display_high_contrast_link();
--><!--/dynamic-cached-content-->

ご覧のとおり、動的コンテンツは2回追加されました - WP Supercache FAQ から

最初のコードはページがキャッシュされたときに実行され、2番目のコードはキャッシュされたページが次の訪問者に提供されたときに実行されます。

2
anu

私はW3TCを使用しているので、これらは私がそれを考え出すことができるアプローチです:

  1. フラグメントキャッシュを使用してページのその部分を除外すると、全体としてキャッシュの有効性が低下します。

  2. 切り替えられたスタイルシートを持つページをクエリ引数で識別し、そのようなページのキャッシュを無効にします。

  3. URLエンドポイントでスタイルシートを切り替えてページを識別し、マスクによるキャッシュを無効にします。

  4. JavaScriptを介してスタイルシートの切り替えを実装する(実際はW3TC固有ではない)。

2
Rarst

アイデア:スタイルをエンキューする場合は、versionfilemtime() を使用します。以前のスタイルシートへの変更が見つかった場合、キャッシュは妨げられ、新しいスタイルシートがロードされます。

2
kaiser