Sur cette page
Accélérer les builds avec le cache de fragments
Certaines parties d’un layout (pied de page, barre latérale, liste des derniers articles, etc.) sont identiques sur toutes les pages, mais sont pourtant régénérées pour chacune d’elles. Avec le cache de fragments, Cecil génère ces parties une seule fois par build et par langue, puis réutilise le résultat pour les autres pages.
Envelopper le contenu avec la balise cache
Entourez la partie à mettre en cache avec la balise cache et une clé construite avec la fonction cache_key :
{% cache cache_key('footer') %}
<footer>
{% for entry in site.menus.footer|sort_by_weight %}
<a href="{{ url(entry.url) }}">{{ entry.name }}</a>
{% endfor %}
</footer>
{% endcache %}
Construire la clé de cache
La fonction cache_key construit une clé à partir d’un nom, d’une valeur facultative, de la langue courante et de l’ID du build :
{% cache cache_key('sidebar', page.section) %}
{# contenu à mettre en cache #}
{% endcache %}
- la langue garantit que chaque langue dispose de son propre fragment
- l’ID du build change à chaque build : un fragment est donc généré une fois par build et n’est jamais réutilisé par un build suivant
- la valeur facultative (chaîne, tableau ou objet) est hachée et ajoutée à la clé, pour conserver plusieurs variantes d’un même fragment, par exemple une par section
Exemple : barre latérale des derniers articles
La liste ci-dessous est générée une seule fois par build et par langue, puis réutilisée par chaque page qui l’inclut :
{% cache cache_key('latest-posts') %}
<aside>
<h2>Latest posts</h2>
<ul>
{% for post in site.pages.showable|filter_by('section', 'blog')|sort_by_date|slice(0, 5) %}
<li><a href="{{ url(post) }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
</aside>
{% endcache %}
Vider le cache
Vider uniquement le cache des fragments :
php cecil.phar cache:clear:templates --fragments
Ou vider tout le cache des templates, ou tous les caches :
php cecil.phar cache:clear:templates
php cecil.phar cache:clear
Pendant le développement local, vous pouvez aussi vider le cache avant chaque build :
php cecil.phar serve --clear-cache