mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-07 10:11:17 +02:00
* First cut * Temporarily disable composer.json for netlify build * POC * New recursive directory query, various refinements * Fix flexbox * new styled components plugin * Apply frontmatter delimiters * Mobile styles, animation * Search * Redesign, clean up * Nuke the cache, try again * fix file casing * Remove production env file * ID headers * Move app to new repo * Add frontmatter universally * Hide children changelogs * Add how to title * New callout tags * Revert inline code block change * Replace note callouts * Fix icons * Repalce images * Fix icon * Fix image links * Use proper SQL icon
48 lines
1.1 KiB
Markdown
48 lines
1.1 KiB
Markdown
---
|
|
title: Caching
|
|
summary: Reduce rendering time with cached templates and understand the limitations of the ViewableData object caching.
|
|
icon: rocket
|
|
---
|
|
|
|
# Caching
|
|
|
|
## Object caching
|
|
|
|
All functions that provide data to templates must have no side effects, as the value is cached after first access. For
|
|
example, this controller method will not behave as you might imagine.
|
|
|
|
```php
|
|
private $counter = 0;
|
|
|
|
public function Counter()
|
|
{
|
|
$this->counter += 1;
|
|
|
|
return $this->counter;
|
|
}
|
|
```
|
|
|
|
|
|
```ss
|
|
$Counter, $Counter, $Counter
|
|
|
|
// returns 1, 1, 1
|
|
```
|
|
|
|
When we render `$Counter` to the template we would expect the value to increase and output `1, 2, 3`. However, as
|
|
`$Counter` is cached at the first access, the value of `1` is saved.
|
|
|
|
|
|
## Partial caching
|
|
|
|
Partial caching is a feature that allows the caching of just a portion of a page. Instead of fetching the required data
|
|
from the database to display, the contents of the area are fetched from a [cache backend](../performance/caching).
|
|
|
|
```ss
|
|
<% cached 'MyCachedContent', LastEdited %>
|
|
$Title
|
|
<% end_cached %>
|
|
```
|
|
|
|
|