Accueil » Blog Tunnel de Vente » Creation De Site Web » Shopify et Liquid : les erreurs de template qui ralentissent votre thème

Shopify et Liquid : les erreurs de template qui ralentissent votre thème

Capture d'un fichier section.liquid Shopify dans un éditeur de code montrant une boucle imbriquée surlignée en rouge avec le nombre d'appels base de données en commentaire à droite

Le moteur Liquid de Shopify s’exécute côté serveur avant que la page n’arrive dans le navigateur du visiteur. Un template mal écrit peut ajouter plusieurs centaines de millisecondes au temps de réponse initial, et cette dette s’accumule au fur et à mesure que le thème grossit avec les sections personnalisées, les blocs métier et les snippets ajoutés au fil des mois. Chez Propuls’Lead, nous voyons régulièrement des boutiques perdre une seconde entière sur le Time To First Byte à cause de patterns Liquid évitables, alors que l’équipe se concentre sur les images ou les scripts tiers. Les optimisations Liquid se font une seule fois et bénéficient à toutes les pages affichées ensuite, ce qui en fait un chantier au rendement élevé une fois identifié.

Pourquoi Liquid pèse autant sur le temps de réponse Shopify

Liquid est exécuté par les serveurs Shopify à chaque requête d’une page de boutique. Le moteur lit le template, résout chaque tag, chaque variable et chaque appel d’objet, puis renvoie le HTML final au navigateur. Cette opération est encadrée par Shopify avec une limite de complexité, mais le seuil reste haut et un template inefficace consomme du temps machine avant d’atteindre cette limite. Plus le template fait d’appels d’objets et plus il parcourt de collections, plus le rendu prend de millisecondes.

La difficulté tient au fait que Liquid donne l’impression de manipuler de simples variables, alors qu’il déclenche des requêtes à la base de données Shopify en arrière-plan. Accéder à `product.collections` charge la liste des collections du produit, accéder à `collection.products` charge la liste des produits de la collection, et chaque accès supplémentaire à une sous-propriété peut déclencher une nouvelle requête. Un développeur qui pense écrire un code simple peut en réalité provoquer des dizaines d’appels qui s’additionnent silencieusement.

Les conséquences se mesurent sur le Time To First Byte mesuré dans PageSpeed Insights. Un template bien écrit livre la première réponse en moins de 200 ms. Un template lourd peut grimper à 800 ms ou plus, ce qui dégrade directement le Largest Contentful Paint et le ressenti utilisateur. Cette logique recoupe celle décrite dans notre article sur Shopify Core Web Vitals et l’amélioration des performances d’une boutique lente, où la couche Liquid arrive souvent en tête des chantiers prioritaires.

Les boucles imbriquées : le piège le plus fréquent

La première erreur récurrente est la boucle imbriquée qui parcourt une collection à l’intérieur d’une autre. Le pattern type ressemble à un `for product in collection.products` qui contient lui-même un `for collection in product.collections` pour afficher les badges de catégorie. Chaque produit déclenche alors une nouvelle requête pour récupérer ses collections, et avec cinquante produits affichés, ce sont cinquante requêtes additionnelles qui ralentissent le rendu.

La correction tient en deux principes simples. Premièrement, sortir les données invariantes de la boucle interne en les chargeant une seule fois avant la boucle externe. Deuxièmement, utiliser la pagination Liquid avec `paginate` pour limiter le nombre d’éléments traités à chaque rendu, typiquement vingt à trente produits par page plutôt que la collection complète. Cette discipline rejoint celle expliquée dans notre article sur Liquid pour les non-développeurs et les modifications de code Shopify, où la lecture du code existant précède toujours sa modification.

Le diagnostic se fait en activant le mode debug Liquid via l’URL avec le paramètre `?debug_liquid=true` sur un thème en preview. Shopify affiche alors le temps de rendu de chaque section et permet d’isoler la boucle qui consomme. Sans cette mesure, on optimise à l’aveugle et on risque de toucher au mauvais endroit.

Les filtres lourds appliqués à grande échelle dans la méthodologie PROPULSE

La deuxième famille d’erreurs concerne les filtres Liquid appliqués sur des collections entières. Les filtres comme `sort`, `map`, `where`, `uniq` ou `compact` sont pratiques mais coûteux quand ils s’appliquent à des centaines d’éléments. Chaîner trois filtres sur une collection de cinq cents produits force le serveur à parcourir cinq cents éléments trois fois, ce qui se traduit en millisecondes mesurables sur le rendu.

Dans le cadre de la méthodologie PROPULSE que nous appliquons chez Propuls’Lead, nous distinguons les filtres qu’on peut pré-calculer en amont via les paramètres de collection Shopify natifs, et ceux qui doivent rester dans le template. Trier une collection par prix se fait mieux via l’URL `?sort_by=price-ascending` que via un filtre Liquid `sort`, parce que le tri est alors calculé côté base de données et mis en cache. Filtrer une collection sur un tag se fait mieux via `?filter.p.tag=` que via un filtre `where`, pour les mêmes raisons.

Pour les filtres qui restent indispensables dans le template, les chaîner avec parcimonie et limiter leur portée à un sous-ensemble réduit améliore nettement le rendu. Appliquer un `sort` puis un `limit` plutôt qu’un `limit` après le tri complet économise des cycles. Cette logique d’allègement progressif rejoint celle décrite dans notre article sur l’accélération d’une boutique Shopify et les optimisations que chaque marchand doit appliquer.

Les appels en cascade aux métafields et aux objets liés

La troisième erreur tient aux accès en cascade à des objets liés comme les métafields, les variantes, les médias ou les collections rattachées à un produit. Chaque accès à `product.metafields.custom.specifications` ou à `product.variants` peut déclencher un appel additionnel si le moteur Liquid n’a pas pré-chargé l’objet. Multipliés sur une fiche produit qui affiche dix métafields différents, ces appels finissent par peser lourdement.

La bonne pratique consiste à assigner les objets utilisés plusieurs fois dans une variable Liquid au début de la section avec `assign`. Le moteur charge alors l’objet une seule fois et le sert depuis la mémoire pour tous les accès suivants. Cette micro-optimisation, appliquée systématiquement, fait gagner cinquante à cent millisecondes sur une fiche produit chargée en métafields. Notre article sur les métafields Shopify et les informations personnalisées sur les produits et les pages détaille la stratégie de structuration des données qui rend cette optimisation efficace en aval.

L’audit complet de ces accès passe par la lecture méthodique de chaque section du thème, en identifiant les variables qui sont appelées plusieurs fois et qui méritent un `assign` préalable. Cette revue de code se fait en une demi-journée sur un thème standard, avec un gain mesurable sur PageSpeed Insights.

Les sections lourdes chargées sur toutes les pages

La quatrième famille d’erreurs vient des sections globales du thème qui s’exécutent sur chaque page, qu’elles soient utiles ou non. L’en-tête peut charger une mégapaneau avec toutes les collections du site, le pied de page peut afficher une grille de produits recommandés, la barre d’annonce peut interroger plusieurs métafields pour personnaliser son message. Ces sections étant rendues partout, leur coût se multiplie par le nombre de pages vues.

La règle simple consiste à conditionner le chargement des sections lourdes au contexte qui les rend pertinentes. Un mégapaneau peut ne charger ses sous-collections que sur les pages de catégorie. Une grille de produits recommandés peut ne s’afficher que sur la page d’accueil et la page panier. Un avis vérifié peut ne s’exécuter que sur les fiches produit. Cette segmentation se fait via les conditions Liquid `if template == ‘product’` ou `unless template contains ‘cart’`, sans toucher au design global du thème.

Le bénéfice cumulé est important parce que les pages les plus consultées d’une boutique sont souvent les fiches produit, qui n’ont pas besoin de tous les contenus secondaires. Cette discipline de chargement contextuel rejoint celle décrite dans notre article sur la personnalisation des fiches produits Shopify et le taux de conversion, où chaque élément ajouté doit justifier son coût en temps de rendu.

Mettre en place une discipline d’audit Liquid récurrente

Les optimisations ponctuelles règlent le problème accumulé, mais sans discipline d’audit, le thème se réencombre à chaque ajout de fonctionnalité. La routine que nous recommandons tient en quatre étapes trimestrielles. Premièrement, activer le mode debug Liquid sur le thème en preview et relever le temps de rendu de chaque section. Deuxièmement, identifier les sections qui dépassent 50 ms et les passer en revue ligne par ligne. Troisièmement, mesurer le Time To First Byte sur les trois templates principaux avec un outil tiers indépendant. Quatrièmement, documenter les optimisations appliquées dans le fichier de changelog du thème pour garder la trace des décisions.

Cette gouvernance évite que chaque nouveau développement ajoute sa couche de dette sans concertation avec l’équipe technique. Elle permet aussi de former les développeurs externes aux bonnes pratiques Liquid spécifiques à votre boutique, avec un référentiel partagé plutôt qu’une transmission orale incomplète. Les boutiques que nous accompagnons sur la durée gagnent typiquement deux cents à cinq cents millisecondes de Time To First Byte sur le premier audit, et conservent cet avantage avec la routine trimestrielle.

Ce qu’il faut retenir avant d’ouvrir vos fichiers Liquid

Le moteur Liquid pèse plus lourd que la plupart des optimisations classiques sur la performance Shopify, mais il reste invisible dans les outils de mesure standard qui se concentrent sur le navigateur. La démarche d’audit tient en cinq points : activer le mode debug pour mesurer chaque section, traquer les boucles imbriquées et les remplacer par des appels paginés, pré-charger les objets utilisés plusieurs fois via `assign`, déplacer les filtres lourds vers les paramètres natifs Shopify, conditionner les sections globales au contexte qui les rend utiles. Chez Propuls’Lead, nous intégrons systématiquement ce chantier dans nos audits de performance Shopify parce qu’il agit sur la racine du temps de réponse, alors que les optimisations d’images ou de scripts tiers n’agissent qu’en aval. Une heure passée à nettoyer un template Liquid se rentabilise sur chaque visite, ce qui en fait l’un des chantiers au meilleur rendement sur une boutique mature.

Sources

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *