{% cache %} タグ

このタグはテンプレートの一部をキャッシュするため、後からのリクエストのパフォーマンスを向上させます。

{% cache %}
    {% for block in entry.myMatrixField.all() %}
        <p>{{ block.text }}</p>
    {% endfor %}
{% endcache %}

警告:異常なページの読み込み時間で苦しむ場合、最適なホスティング環境を経験していないかもしれません。{% cache %} を試す前に、専門家に相談してください。{% cache %} は高速なデータベース接続、効率的なテンプレート、または適度なクエリ数に代わるものではありません。可能性のある副作用には、古くなったコンテンツ、過度に時間のかかるバックグラウンドタスク、動かなくなったタスク、および、稀に消滅があります。{% cache %} が適切かどうかをホスティングプロバイダに問い合わせてください。

パラメータ

{% cache %} タグは、次のパラメータをサポートしています。

globally

URL ごとではなく、(現在のサイトロケールのための)グローバルな出力をキャッシュします。

{% cache globally %}

using key

キャッシュが使用するキーの名前を指定します。これを指定しない場合、Twig が最初にテンプレートを解析するときにランダムなキーが生成されます。

{% cache using key "page-header" %}

TIP

クエリ文字列の変数をパスに含めることなく、ページごとのテンプレートをキャッシュするために globally パラメータを組み合わせることができます。

{% cache globally using key craft.app.request.pathInfo %}

WARNING

カスタムキーを利用している {% cache %} 内のテンプレートコードを変更する場合、既存のテンプレートキャッシュは自動的にパージされません。タグに新しいキーを割り当てるか、「設定」の「キャッシュをクリア」ツールを使用して既存のテンプレートキャッシュを手動でクリアする必要があります。

for

キャッシュが有効期限になるまでの時間。

{% cache for 3 weeks %}

許可される継続時間の単位は、次の通りです。

  • sec(s)
  • second(s)
  • min(s)
  • minute(s)
  • hour(s)
  • day(s)
  • fortnight(s)
  • forthnight(s)
  • month(s)
  • year(s)
  • week(s)

ヒント:このパラメータが省略される場合、コンフィグ設定の cacheDuration がデフォルトの継続時間を定義するために使用されます。

until

キャッシュの有効期限を DateTime オブジェクトで定義します。

{% cache until entry.eventDate %}

TIP

forまたは until のいずれかを1つの {% cache %} タグで使用できます。

if

ある条件が満足される場合のみ、 {% cache %} タグを作動させます。

{# Only cache if this is a mobile browser #}
{% cache if craft.app.request.isMobileBrowser() %}

unless

ある条件が満たされる場合、{% cache %} タグが作動しないようにします。

{# Don't cache if someone is logged in #}
{% cache unless currentUser %}

TIP

ifまたは unless のいずれかを1つの {% cache %}タグで使用できます。

キャッシュのクリア

タグ内のエレメント(エントリ、アセットなど)が保存または削除されると、キャッシュは自動的にクリアされます。

タグ内にエレメント クエリ(例:craft.entries)を持ち、クエリの1つによって返される新しいエレメントを作成する場合、Craft はそれを判断してキャッシュをクリアすることもできます。

「キャッシュをクリア」ツールを使用して、「設定」ページからすべてのテンプレートキャッシュを手動でクリアすることもできます。

どんなときに {% cache %} タグを使うのか

沢山のデータベースクエリを引き起こすテンプレートがある場合、または Twig の計算上非常にコストがかかる処理を行っているときは、{% cache %} タグを使うべきです。

それらを使用する場合のいくつかの例です。

  • エントリの大きなリスト
  • いくつかのブロックが関連フィールドを持ち、独自のデータベースクエリをページに追加している行列フィールドのループ
  • 他のサイトからデータを取得しているときはいつでも

それらを使用するのがよいアイデア ではない 場合のいくつかの例です。

  • Don’t use them to cache static text; that will be more expensive than simply outputting the text.

  • You can’t use them outside of top-level {% block %} tags within a template that extends another.

  • The {% cache %} tag will only cache HTML, so using tags like {% css %} and {% js %} inside of it doesn’t make sense because they don’t actually output HTML therefore their output won’t be cached.

    {# Bad: #}
    
    {% extends "_layout" %}
    {% cache %}
        {% block "content" %}
            ...
        {% endblock %}
    {% endcache %}
    
    {# Good: #}
    
    {% extends "_layout" %}
    {% block "content" %}
        {% cache %}
            ...
        {% endcache %}
    {% endblock %}
    

ヒント:{% cache %} タグは、その中にまだ生成されていない 画像の変形 URL が含まれるかどうかを検出します。それが含まれる場合、次のリクエストまでテンプレートのキャッシュを保留するため、一時的な画像 URL はキャッシュされません。