Caching

Automatic and manual template caching

1 min read 278 words

Kida provides two levels of template caching: automatic block caching for site-wide content and manual fragment caching for expensive operations.

Automatic Block Caching

Kida analyzes templates at compile time and automatically caches blocks that only depend on site-wide data. Blocks that only reference site-wide variables (likesite.*,config.*) are rendered once per build and reused across all pages. For example, on a 500-page site, a site-scoped footer block renders once instead of 500 times.

Fragment Caching

Use{% cache %}for manual control over expensive operations like navigation trees, related posts, and statistics.

{% cache "related-posts-" ~ post.id %}
  {% let related = site.pages
    |> where('type', 'blog')
    |> where('tags', post.tags[0])
    |> take(5) %}
  <ul>
    {% for item in related %}
      <li><a href="{{ item.url }}">{{ item.title }}</a></li>
    {% end %}
  </ul>
{% end %}

Performance Impact

Automatic block caching provides significant performance improvements for site-scoped blocks. The following table illustrates theoretical savings assuming a 200-line footer block that depends only on site-wide data:

Site Size Lines Rendered (Before) Lines Rendered (After) Savings
100 pages 20,000 200 99%
500 pages 100,000 200 99.8%
1000 pages 200,000 200 99.9%

Note: These percentages are illustrative examples based on theoretical calculations. Actual savings depend on:

  • Number of site-scoped blocks in your templates
  • Size of each cached block
  • Site structure and template complexity

To verify actual performance improvements, build your site with--verboseto see block cache statistics, or compare build times with and without caching enabled.

Topics