Tout ce que vous voudriez savoir avant d'installer.
Un regard détaillé sur le fonctionnement de DataFirefly Image Optimizer — WebP, AVIF, compression et CDN pour Shopware 6, pourquoi nous l'avons conçu ainsi, et la réflexion derrière les fonctionnalités ci-dessus.
Le problème des images sur Shopware 6 par défaut
Shopware compresse les JPEG via le ThumbnailService natif et génère plusieurs tailles de vignettes, mais ne produit ni WebP ni AVIF. Or, WebP économise en moyenne 25 à 35 % par rapport au JPEG et AVIF descend encore plus bas — entre 50 et 60 % de gain par rapport au JPEG dans la plupart des cas. Sans ces formats, votre Largest Contentful Paint reste lourd, et votre score Core Web Vitals plafonne. Sans intégration CDN native non plus, chaque image est servie depuis votre serveur d'application, augmentant la charge et la latence pour les visiteurs distants.
Le pipeline complet que ce plugin met en place
À l'upload d'un média, le subscriber écoute media.written et détecte les types JPEG, PNG et GIF. La compression in-place de l'original est appliquée si activée — JPEG progressif avec sous-échantillonnage 2x2/1x1/1x1 et qualité configurable, PNG avec niveau de compression et filtres réglés. Les métadonnées EXIF et ICC sont supprimées si l'option est cochée — gain de poids non négligeable sur les photos sortant directement d'un appareil. Puis le sibling WebP est généré à côté avec une extension cumulée — foo.jpg.webp — selon la qualité configurée, mode lossless optionnel pour les PNG. Puis le sibling AVIF est généré avec sa propre qualité, indépendante, et un garde-fou sur la largeur maximale pour éviter de saturer le CPU sur les très grandes images. Enfin les vignettes Shopware reçoivent le même traitement.
Réécriture CDN avec portée fine
L'intégration CDN ne se contente pas de réécrire bêtement toutes les URLs. Trois portées sont disponibles : médias uniquement, qui ne touche que les URLs commençant par /media, médias plus vignettes, qui ajoute /thumbnail, et tous les assets statiques, qui inclut aussi /theme, /bundles et /assets. La portée par défaut, médias uniquement, est la plus sûre et couvre 95 % des besoins. Le filtre Twig df_cdn permet en plus aux développeurs de thèmes d'appliquer la réécriture manuellement sur n'importe quelle URL. Quand le CDN est actif, le plugin injecte automatiquement dns-prefetch et preconnect dans la balise head, ce qui fait gagner 50 à 200 ms sur la première requête CDN selon la latence.
Rendu picture conforme aux meilleures pratiques
Le composant storefront/component/image/thumbnail.html.twig est étendu via sw_extends. Le bloc component_thumbnail_picture wrap la balise img parente dans un picture avec sources AVIF puis WebP, suivies du fallback original. L'ordre est crucial — AVIF en premier car les navigateurs récents le préfèrent et économisent ainsi le plus de bande passante, WebP en second comme filet de sécurité pour Safari ancien, et le fallback JPEG/PNG pour tout le reste. Les attributs loading lazy, decoding async, width et height pour prévenir le CLS sont ajoutés selon la configuration.
Tâche planifiée pour les images déjà en base
Activer le plugin sur une boutique avec déjà des milliers d'images en base ne déclenche pas l'optimisation rétroactive automatiquement — ce serait dangereux. À la place, une tâche planifiée Shopware tourne par défaut toutes les 15 minutes, identifie les médias non encore optimisés via une jointure LEFT JOIN sur df_image_optimizer, et traite un lot configurable — 50 par défaut. Cela permet de rattraper une grosse boutique en quelques heures sans bloquer la queue ni saturer le serveur. Un bouton dans le dashboard admin permet aussi de déclencher un lot manuel à tout moment pour les tests ou les rattrapages ponctuels.
Détection serveur transparente
Avant même la première optimisation, le dashboard affiche en temps réel ce qui est disponible côté serveur : version PHP, présence d'Imagick avec ses formats supportés, présence de GD avec ses formats, support effectif de WebP et d'AVIF, et le moteur recommandé. Imagick est priorisé quand disponible car il offre une meilleure qualité d'encodage et un support AVIF natif via libheif. GD prend le relais sinon — il supporte WebP depuis longtemps et AVIF depuis PHP 8.1. Aucune surprise — si AVIF n'est pas disponible côté serveur, le plugin saute simplement cette étape et continue avec WebP, plutôt que de planter.
Sécurité et propreté
Les conversions sont atomiques — le plugin stage l'image dans un fichier temporaire local pour les converteurs qui nécessitent un chemin réel, puis nettoie systématiquement via un bloc finally. Les erreurs sont loguées via PSR Logger sans jamais interrompre la transaction d'écriture du média — un upload qui réussit ne sera jamais bloqué par une conversion qui échoue. La désinstallation propose de conserver ou non les données utilisateur — les tables df_image_optimizer sont supprimées seulement si vous décochez l'option. Les fichiers WebP et AVIF générés sur le filesystem restent par sécurité — un script d'une ligne permet de les nettoyer si nécessaire.
Pour qui ce plugin est-il fait ?
Pour toute boutique Shopware 6 dont les images représentent un goulot d'étranglement sur le LCP ou la bande passante. Pour les boutiques B2C avec des catalogues photo riches — mode, déco, mobilier, alimentaire. Pour les boutiques internationales qui livrent loin du serveur d'origine et veulent décharger sur un CDN. Pour les développeurs de thèmes qui veulent un filtre et une fonction Twig propres au lieu de bricoler les balises img à la main. Pour les équipes SEO qui suivent les Core Web Vitals et veulent gagner facilement 20 à 40 points de PageSpeed.
Il n’y a pas encore d’avis.