Template Caching

For now we support just template block caching with the cache block.

The Cache block is simple, and accepts only two parameters: cache key and strategy object (with strategy key and value).

Note

Cache blocks can be nested:

1
2
3
4
5
6
7
{% cache 'v1' {time: 900} %}
    {% for item in items %}
        {% cache 'v1' {gen: item} %}
            {# ... #}
        {% endcache %}
    {% endfor %}
{% endcache %}

The annotation can also be an expression:

1
2
3
4
{% set version = 42 %}
{% cache 'hello_v' ~ version {time: 300} %}
    Hello {{ name }}!
{% endcache %}

There is no need to invalidate keys - the system will clear unused cache entries automatically.

Strategies

There are two available cache strategies: lifetime and generational.

With lifetime as a strategy key you need to provide time with a value in seconds.

1
2
3
4
{# delegate to lifetime strategy #}
{% cache 'v1/summary' {time: 300} %}
    {# heavy lifting template stuff here, include/render other partials etc #}
{% endcache %}

With generational as a strategy key you need to provide gen with object or array as the value.

1
2
3
4
{# delegate to generational strategy #}
{% cache 'v1/summary' {gen: gimme.article} %}
    {# heavy lifting template stuff here, include/render other partials etc #}
{% endcache %}

Note

You can pass Meta object to generational strategy and it will be used for key generation. If Meta value have created_at or updated_at then those properties will be used, otherwise key will be generated only from object id.

Content list blocks caching

It’s important to always use generational strategy for content lists (and it items) caching. Publisher will update cache key generated with it every time when items on list are added/removed/reordered or when list criteria are updated or even when article used by list will be unpublished or updated.

1
2
3
{% cache 'frontPageManualList' {gen: contentList} %}
    {# get and render list items here #}
{% endcache %}