Il y a deux mois, chercher quelque chose de courant sur la marketplace, un vélo, par exemple, relevait du jeu de devinettes. La barre latérale affichait toutes nos catégories, de haut en bas, sous forme d'arborescence. Vous en choisissiez une, vous faisiez défiler, vous tombiez dans une impasse, retour en arrière, on essaie la suivante, et on recommence. La barre latérale décrivait notre catalogue, pas vos résultats.

Ça nous dérangeait. Alors nous avons démonté la barre latérale et nous l'avons reconstruite. Au passage, nous avons réduit le poids de chaque photo du site, fait en sorte que l'en-tête s'efface pendant que vous faites défiler, et ajouté une poignée de petites astuces de navigateur qui, mises bout à bout, donnent l'impression que « quelque chose a changé ici ». Voici le récapitulatif.

−30%
Poids des images
À qualité visuelle égale, sur chaque photo du site.
Un clic
Affiner votre recherche
Choisir une catégorie parmi l'ensemble pertinent, pas le catalogue.
0 px
Saut des fenêtres modales
Ouvrir une fenêtre modale ne décale plus la page.

Des images plus rapides

Toutes les images passent par nous. Les utilisateurs téléversent un JPEG de 4 Mo de la table de leur cuisine ; nous le redimensionnons pour les cartes produit, les pages produit et les vignettes, et nous servons ces copies pour toujours. Le pipeline avait été mis en place il y a des années et il fonctionnait, mais il avait deux problèmes que nous ignorions.

Premier problème : nous conservions chaque image dans le format dans lequel elle avait été téléversée. Le JPEG restait JPEG, le PNG restait PNG. Nous redimensionnions de façon agressive, mais nous n'avions jamais ré-encodé dans un format moderne plus léger, laissant ainsi de côté environ un tiers du poids de chaque photo.

Deuxième problème : le navigateur n'avait aucune idée de l'image la plus importante sur une page produit. La grande image principale, les quatre vignettes à côté, la rangée de produits recommandés en dessous, toutes se chargeaient avec la même priorité, se disputant la même connexion. L'image principale s'affichait quand bon lui semblait.

Les deux sont corrigeables.

Un seul format pour chaque photo

Nous avons standardisé un format d'image moderne unique dès l'entrée. Quel que soit le format que vous téléversez, JPEG, PNG, GIF animé, nous ré-encodons vers le plus léger. Pour les GIF animés, nous gardons la première image ; les photos de produits ne sont pas des animations, et nous préférons une image fixe plus légère qu'une boucle pataude que personne n'a demandée.

Même qualité visuelle. Environ 30 % de poids en moins par image. Appliqué à chaque nouveau téléversement dès le premier jour du sprint.

Indiquer au navigateur ce qui compte

C'était le plus gros gain. On peut indiquer aux navigateurs quelle image d'une page est la plus importante, l'image « principale », pour qu'ils la récupèrent avant tout le reste. Nous avons ajouté ces indications à trois endroits :

  • L'image principale d'une page produit : priorité maximale. Les vignettes latérales sont explicitement abaissées pour ne pas entrer en concurrence.
  • La première rangée de cartes des fils d'accueil et de recherche : élevée. Les rangées sous la ligne de flottaison attendent que vous fassiez défiler vers elles.
  • L'imagerie décorative (les petites icônes de catégorie, etc.) : faible, et chargée uniquement à la demande.
High
Low
Low
Low
Low

The hero downloads first; thumbnails wait their turn.

Un petit bug discret repéré en chemin

La galerie de la page produit choisissait une taille de photo en fonction de l'ordre dans lequel le serveur les renvoyait par hasard, et non de la taille réellement nécessaire. Parfois l'image principale était une vignette de 300 pixels ; parfois une vignette était la version en pleine résolution. Un affichage neuf « paraît » plus net désormais, parce que la bonne taille finit au bon endroit.

Un filtrage de recherche plus malin

Revenons à l'exemple du vélo. Une telle recherche traverse de nombreuses catégories, vélos adultes, vélos enfants, pièces, accessoires, et l'ancienne barre latérale n'avait aucune idée de celles qui contenaient réellement des résultats. Vous le découvriez en cliquant sur chacune. La nouvelle barre latérale affiche simplement l'ensemble pertinent, avec les décomptes.

Filters
Search in title only
Catégorie
Vélos adultes
(64)
Vélos enfants
(22)
Pièces de vélo
(41)
Accessoires
(18)
Marque
Btwin
(31)
Trek
(14)
Specialized
(9)
Cube
(7)
Prix
€120€2 400

La même idée se déploie pour chaque attribut que nous connaissons. Marque, couleur, taille, taille de cadre, poids, si les résultats correspondants ont des valeurs pour cet attribut, il apparaît dans la barre latérale avec des cases à cocher et des décomptes.

Pour les attributs numériques (prix, poids, capacité, etc.), nous avons remplacé les anciens champs « saisir un min et un max » par un curseur dont les bornes correspondent à la plage réellement présente dans les résultats. Si l'annonce correspondante la moins chère est à €120, le curseur commence à €120. Fini de taper un min de €10 quand aucun résultat n'est de toute façon moins cher que €120.

Ancienne barre latérale

Arborescence de catégories statique (chaque nœud du catalogue). Champs min/max vides pour le prix. Aucune idée des catégories qui contiennent réellement des résultats avant d'avoir cliqué sur chacune.

Nouvelle barre latérale

Uniquement les catégories avec des résultats correspondants, triées par décompte. Sélection multiple pour élargir. Curseur borné par le vrai min/max des annonces correspondantes. La barre latérale est une carte de l'ensemble des résultats, pas un répertoire du catalogue.

Quand l'ensemble des résultats est vide

Une dernière subtilité : si vous filtrez à l'excès et tombez sur zéro résultat, toute la barre latérale disparaît. Il n'y a rien à affiner, les étiquettes de filtres et les cases à cocher ne seraient que du bruit visuel. La page se réduit à un unique bouton « Effacer tous les filtres », centré. Un clic et vous revenez là où la barre latérale peut vous aider.

Une expérience de navigation plus soignée

Cinq petites choses sont arrivées ce sprint qui, ensemble, changent le ressenti du site. Aucune n'est une fonctionnalité spectaculaire ; chacune tient en une ou deux déclarations CSS. Elles sont listées par ordre de fréquence à laquelle un utilisateur type les rencontrera.

L'en-tête s'efface

La barre de navigation blanche en haut de chaque page glisse maintenant vers le haut hors de l'écran quand vous faites défiler vers le bas, et revient en vue quand vous faites défiler vers le haut, le classique motif « l'en-tête s'efface pendant que je lis ». Les navigateurs qui ne prennent pas en charge la fonctionnalité sous-jacente gardent simplement la barre visible ; rien ne casse.

Des transitions carte → produit plus fluides

Cliquez sur une carte produit dans le fil d'accueil ou de recherche et son image principale s'anime maintenant en douceur jusqu'à sa place sur la page de détail du produit, au lieu de l'ancien saut sec. Le titre, le prix et le bouton « j'aime » de la carte font de même. C'est la différence entre une page qui « se charge » et une page qui « se transforme ».

Les titres se coupent plus joliment

Les titres de produits, les titres de cartes, les en-têtes de section, aucun ne laisse plus un mot orphelin sur la dernière ligne. Le navigateur équilibre les sauts de ligne à notre place. Une seule déclaration CSS, appliquée à tout le site, immédiatement visible partout où un titre se coupe.

Plus de saut horizontal à l'ouverture des fenêtres modales

Avant : on ouvrait la fenêtre modale de partage, la page faisait une embardée de 15 pixels vers la droite quand la barre de défilement disparaissait, et tout en dessous se décalait. Maintenant : une gouttière réservée maintient l'espace, que la barre de défilement soit là ou non. Les fenêtres modales s'ouvrent sans que la page ne fasse d'embardée.

Des changements de langue plus rapides

Le formatage des dates dans votre langue était auparavant livré avec les données de formatage de toutes les autres langues prises en charge, environ 100 Ko de données de locale, alors que vous n'en aviez besoin que d'une seule. Nous ne chargeons désormais que la langue que vous utilisez. Bundle plus léger, premier rendu plus rapide.

Nettoyage sous le capot

Un tas de petits ajustements que vous auriez du mal à remarquer individuellement, mais qui se traduisent par des traces plus propres dans nos tableaux de bord de performance. Aucun n'a modifié un comportement visible. Les chiffres clés :

−1 RTT
Poignée de main API
Connexion préchauffée avant le déclenchement de la première requête.
au repos
Init des analytics
Hors du chemin critique ; s'exécute pendant les temps d'inactivité du navigateur.
moins
Bavardage de télémétrie
Nous avons réduit la fréquence de remontée des données de diagnostic.
audit
Revue du bundle
Nous avons cartographié les modules lourds ; coupes prévues pour le prochain sprint.

Ce que nous n'avons pas (encore) livré

Quelques éléments ont été entamés mais n'ont pas tenu dans ce sprint :

  • Le filtrage d'attributs à valeurs multiples. L'interface accepte plusieurs valeurs cochées par attribut (vous pouvez cocher trois marques), mais une seule est honorée côté serveur aujourd'hui. Au prochain sprint.
  • Un recalcul plus malin des facettes. Pour l'instant, cocher « ASUS » retire les autres options de marque de la liste. La version aboutie recompte chaque facette en excluant son propre filtre pour que les options restent visibles. Faisable ; il s'agit juste du chemin de requête le plus coûteux.
  • Les images AVIF. Encore plus légères que ce que nous livrons aujourd'hui. Cela coûte plus de travail d'encodage côté serveur ; mis en attente jusqu'à ce que nous fassions des mesures de performance.

C'est tout pour ce sprint. Le prochain article devrait couvrir le travail que nous avons entamé sur les annonces partagées d'utilisateur à utilisateur, discrètement la fonctionnalité la plus demandée du dernier trimestre, une fois qu'il sera assez avancé pour en parler.