Le WordPress d'aujourd'hui, décodé pour les développeurs

Performance

Formidable Forms : un calcul en JavaScript qui plombe le CLS d’un devis en ligne

Un formulaire de devis affiche son total après un décalage visuel net. Diagnostic du calcul déclenché après le rendu et correctif par réservation d'espace.

Par WordPress Développement • 21 janvier 2023 • 4 min de lecture • Aucun commentaire
Formidable Forms : un calcul en JavaScript qui plombe le CLS d'un devis en ligne

0,31 : c’est le score CLS relevé par PageSpeed Insights sur la page d’un formulaire de devis en ligne, largement au-dessus du seuil de 0,1 recommandé pour un bon score Core Web Vitals. Le formulaire fonctionnait pourtant sans erreur visible, et personne dans l’équipe n’avait signalé de bug d’affichage.

Le diagnostic a commencé par un enregistrement vidéo du chargement de la page en simulant une connexion 4G ralentie. La vidéo montrait clairement le problème : un champ de résultat apparaissait brutalement sous les champs de saisie, quelques centaines de millisecondes après le rendu initial, poussant tout le contenu situé en dessous.

Le mécanisme en cause

Le formulaire de devis, construit avec Formidable Forms, comportait un champ calculé configuré pour afficher un total en fonction de plusieurs sélections (surface, matériaux, options). Ce type de champ repose sur un calcul exécuté côté client une fois le DOM du formulaire entièrement chargé et les scripts de Formidable initialisés.

Tant que ce calcul n’a pas tourné, le champ calculé reste vide ou masqué selon la configuration retenue. Une fois le script exécuté, la valeur s’affiche et le champ prend sa hauteur définitive, ce qui pousse visuellement tout ce qui suit dans le flux de la page. C’est exactement la définition d’un Cumulative Layout Shift : un déplacement de contenu déjà visible, après le rendu initial.

Pourquoi ce n’était pas visible en navigation normale

Sur une connexion rapide et un ordinateur de bureau puissant, le calcul s’exécutait si vite que le décalage passait sous le seuil de perception humaine, même s’il restait techniquement mesurable par les outils de Google. C’est un piège fréquent avec le CLS : le défaut existe indépendamment de la vitesse de la machine qui le mesure, mais son impact perçu varie énormément selon le contexte réel de navigation.

L'essentiel à retenir : Le champ de total apparaît après le calcul, jamais avant ; Réserver la hauteur du champ évite le saut visuel ; Un test systématique sur mobile aurait révélé le problème plus tôt

Le correctif retenu

Plutôt que de tenter de désactiver le calcul JavaScript, ce qui aurait supprimé une fonctionnalité utile aux visiteurs, le choix s’est porté sur une réservation d’espace. Le conteneur du champ calculé a reçu une hauteur minimale fixe correspondant à sa taille une fois rempli, ainsi qu’un état de chargement visuellement neutre affiché avant l’exécution du calcul.

.frm_calc_field_container {
    min-height: 3.25rem;
    display: flex;
    align-items: center;
}
.frm_calc_field_container:empty::before {
    content: "Calcul en cours…";
    color: #6b7280;
    font-size: 0.875rem;
}

Cette approche garantit que l’espace occupé par le champ ne change jamais de dimension entre l’état initial et l’état final, quelle que soit la vitesse d’exécution du script de calcul. Le contenu situé en dessous ne bouge donc plus, quel que soit le moment où le calcul se termine.

Résultat mesuré après correctif

Après déploiement, le score CLS de la page est retombé à 0,03 sur les mesures de terrain collectées via le rapport d’expérience utilisateur Chrome, soit une baisse largement suffisante pour repasser dans la zone verte des Core Web Vitals sur cette page précise.

  • Avant correctif : CLS à 0,31, dans la zone rouge
  • Après réservation d’espace : CLS à 0,03, dans la zone verte
  • Aucun changement de comportement fonctionnel pour l’utilisateur final

Prévention pour les prochains formulaires

Le vrai enseignement de ce cas ne tient pas au correctif lui-même, assez simple une fois le diagnostic posé, mais à l’absence de test systématique du CLS sur les formulaires publiés. Un contrôle Lighthouse en local, avant chaque mise en ligne de formulaire comportant des champs calculés, aurait détecté le problème avant qu’il n’affecte des visiteurs réels pendant plusieurs semaines.

Tout champ dont le contenu dépend d’un script exécuté après le rendu mérite une hauteur réservée par défaut. C’est une règle simple, systématique, qui coûte quelques lignes de CSS et évite des semaines de score dégradé.

En résumé

Un calcul JavaScript exécuté après le rendu initial d’un formulaire est une source de décalage visuel fréquente et souvent invisible en navigation normale sur un poste rapide. La réservation d’espace via une hauteur minimale reste le correctif le plus fiable, sans toucher à la logique métier du formulaire. Ajouter un test CLS systématique avant mise en ligne, sur un profil de connexion ralentie, aurait permis de détecter ce problème avant qu’il n’atteigne les visiteurs du formulaire de devis.

Laisser un commentaire

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

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi