Logo de Cecil Cecil
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