Data URIs VS CSS Sprites

Data URIs VS CSS Sprites

J’ai profité de la sortie de la branche 2.7 de Dotclear et de l’arrivée de Twig comme moteur de template pour faire quelques modifications sur le blog :

  • Migration vers des templates utilisant la syntaxe Twig et utilisation au maximum de l’héritage (la killer feature de Twig !).
  • Utilisation encore plus massive de Less.
  • Mise à jour des librairies JS et CSS (merci Bower).
  • Suppression des sprites CSS pour utiliser des images en data URI au sein de mes CSS.

Et c’est sur ce dernier point que je souhaitais discourir…

Les sprites CSS c’est bien… mais c’est chi**t !!!

En effet, les sprites CSS c’est bien pour les performances web client side (notamment : Minimize HTTP Requests & Preload Components). Le problème, c’est que c’est chi**t à manipuler ! Il existe des générateurs de sprites, mais ce n’est pas la panacée. Bilan : j’y réfléchi à 2 fois avant de changer une image et dans certains cas il est même obligatoire de mixer plusieurs images sprites (sur des background-repeat bien complexes).

Data URI, L’alternative ?

La solution alternative c’est d’utiliser des data URIs, c’est à dire de mettre le code base64 de l’image directement dans la CSS (où une CSS séparée). Vous me direz que faire un sprite CSS ou faire un base64 c’est aussi pénible et je vous répondrais oui… Si on travaille en pure CSS ! Mais si on utilise Less (et c’est surement aussi possible en Sass) il y a une fonction qui fait ça automatiquement !

Y a-t-il que des avantages ?

Malheureusement non.

  • Un fichier CSS avec du base64 pèse 25% (10% si on utilise compression gzip) de plus qu’un sprite.
  • Les data URI’s ne sont pas supportées par IE6/7 (ça je m’en fous un peu :-)).
  • Les performances sont quelques peu en dessous d’un sprite.

En conclusion

J’ai déjà pas mal optimisé mon site, le fait de passer par data-uri me permet de :

  • Réduire le poids général de ma CSS (j’embarquais déjà quelques data-uri que je viens de délocaliser dans une CSS à part).
  • Pouvoir rapidement faire évoluer mon image sprites (retirer les images inutiles par exemple) et gagner en time to market.

Bref : adopté !

Avatar de Guillaume Kulakowski

À propos de l’auteur

Derniers articles sur le journal

  • SeedboxSync v4.1 : Authentification OIDC, Gravatar et refonte de l’administration
    Découvrez les nouveautés de SeedboxSync v4.1 : intégration d’un système d’authentification natif et OIDC (SSO), support de Gravatar, gestion des utilisateurs en CLI, formulaires Flask-WTForm et transition vers Peewee-Migrate.
  • De Jellystat à Jellydash : moderniser le suivi de mon serveur Jellyfin
    Pourquoi et comment j’ai remplacé Jellystat par Jellydash pour le suivi des statistiques de mon serveur Jellyfin. Retour d’expérience sur la découverte de cet outil moderne, léger et prometteur repéré dans la newsletter selfh.st.
  • SeedboxSync 4.0 : Fusion de l’IHM et du CLI
    La v4.0.0 de SeedboxSync marque un tournant majeur : fusion du CLI et du frontend en une seule application, migration de la configuration en base de données, planificateur Python natif et passage à SQLite WAL. Tour d’horizon des nouveautés et des changements d’architecture.
  • Modernisation du tooling dev sur SeedboxSync : Just, pnpm, uv & Ruff
    SeedboxSync fait peau neuve côté tooling ! Retour sur la modernisation de mon environnement de dev : abandon du bon vieux Makefile au profit de Just, transition vers pnpm pour un gain de temps spectaculaire côté frontend, et adoption de uv et Ruff pour booster l’écosystème Python. Moins de friction, plus de vitesse : découvrez le détail de cette mise à jour.

Articles à la une