[← See all Blog posts](/resources/blog)

20 June 2026

# A deep dive into cache components

How the App Router and Sanity Live keep pages fast and fresh at the same time.

-   [Engineering](/resources/blog/categories/engineering)
-   [Performance](/resources/blog/categories/performance)

![Cover illustration for A deep dive into cache components](https://cdn.sanity.io/images/f9tyxuia/production/0f4fc00ee65cea8579ee98032bc82bea0cefae7b-1600x900.svg)

Fast and fresh usually pull in opposite directions. Cache components let you have both.

## The three-layer pattern

Published requests render a cached body directly; draft requests resolve dynamic options inside Suspense.

Only the innermost layer carries the cache boundary, so the shell still prerenders.

### Takeaways

-   Resolve dynamic APIs above the cache boundary
-   Tag reads for on-demand invalidation
-   Subscribe to live events only in draft mode

> Cache the shell, stream the difference.