Analysez la performance de vos animations avec Chrome DevTools

Nous avons passé un temps considérable à apprendre comment optimiser nos animations, mais


Comment savoir si ça marche ?

Pour le moment, vous avez dû me croire sur parole concernant les propriétés à bannir.

Car toutes vos animations sont probablement parfaitement fluides sur votre machine
 (oui oui, je dis "machine" pour "ordinateur" đŸ€–) mais si vous apprenez Ă  dĂ©velopper, c'est que vous ĂȘtes probablement sur un ordinateur puissant, Ă©quipĂ© d’une carte graphique moderne (sans vouloir vous juger sans vous connaĂźtre). Mais comment savoir si l’animation sera bien fluide sur la tablette bas de gamme achetĂ©e en soldes par votre grand-pĂšre ?

Heureusement pour nous, Chrome propose toute une suite d’outils intĂ©grĂ©s. Vous les avez peut-ĂȘtre dĂ©jĂ  utilisĂ©s en inspectant le code source d’un site web, ou en ouvrant la console. Mais ce n’est qu'une toute petite partie de l'ensemble de ces outils, aussi appelĂ©s DevTools.

DevTools met à notre disposition de nombreux outils. Notamment un qui simule le fonctionnement de nos animations sur un vieux smartphone. Il permet également d'analyser en détail les performances de notre animation, afin d'identifier les problÚmes potentiels et de les corriger.

Dans ce chapitre, nous apprendrons Ă  maĂźtriser l'outil de performance de Chrome DevTools pour que nos animations soient aussi fluides que possible.

Faites apparaßtre des éléments cachés

Ici, nous avons une petite application. Elle reprĂ©sente une sĂ©rie de cartes, chaque carte munie d’une photo et de quelques blocs de texte. Il y a Ă©galement un bouton qui rĂ©vĂšle une troisiĂšme carte cachĂ©e :

Animation d'un bloc de texte caché derriÚre un autre

L’apparition de la carte cachĂ©e est constituĂ©e de plusieurs transitions : l’apparition de la carte elle-mĂȘme, et une deuxiĂšme transition qui pousse l’autre carte sur la droite.

$easing: cubic-bezier(.49,.18,.23,1);
$width: 33vh;
$height: 72vh;
$margin-right: 4vh;
$wid-marg: $width + $margin-right;
.card {
    width: $width;
    height: $height;
    overflow: hidden;
    &:not(:last-child){
        margin-right: $margin-right;
    }
    &--anim {
        transform: translateX($width-marg);
        transition: transform 700ms $easing;
    }
    &__contents {
        width: $width;
        overflow: hidden;
    &--anim {
            transform: translateX($wid-marg*-1);
            transition: transform 700ms $easing;
        }
    }
}
.btn {
    &--reveal {
        &:hover {
            & + .card {
                &--anim {
                    transform: translateX(0);
                }
                .card__contents--anim {
                    transform: translateX(0);
                }
            }
        }
    }
}

On a aussi ajouté quelques mouvements secondaires (souvenez-vous des 12 principes) avec plusieurs transitions pour révéler les blocs de texte de la carte :

</>
$easing: cubic-bezier(.49,.18,.23,1);
$width: 33vh;
$height: 72vh;
$margin-right: 4vh;
$wid-marg: $width + $margin-right;
.card {
    width: $width;
    height: $height;
    overflow: hidden;
    &:not(:last-child){
        margin-right: $margin-right;
    }
    &--anim {
        transform: translateX($width-marg);
        transition: transform 700ms $easing;
    }   
    &__contents {
        width: $width;
        overflow: hidden;
    &--anim {
            transform: translateX($wid-marg*-1);
            transition: transform 700ms $easing;
        }
    }
    &__block {
    overflow: hidden;
    // une boucle créée avec sass qui itÚre de 1 à 3, en utilisant l'index
    // comme suffixe pour le nom --anim mod
    // ainsi que comme valeur pour multiplier la valeur de transition delay
    @for $i from 1 through 3 {
        &--anim-#{$i} {
                transform: translateX(-108%);
                transition: transform 500ms $easing 50ms*$i;
            }
        }
        &:not(:first-child) {
            margin-top: 1rem;
        }
    }
}
.btn {
    &--reveal {
        &:hover {
            & + .card {
                &--anim {
                    transform: translateX(0);
                }
                .card__contents--anim {
                    transform: translateX(0);
                }
                .card__block--anim {
                    transform: translateX(0);
                }
            }
        }
    }
}

Toutes ces animations sont bien fluides sur notre ordinateur, mais ça ne suffit pas. Nous voulons qu’elles soient fluides sur tous les Ă©crans, y compris sur des supports anciens ou bas de gamme. Au total, l’apparition de la carte est constituĂ©e de 5 transitions distinctes. Comment nous assurer qu’elles fonctionneront bien de maniĂšre fluide chez tout le monde ?

Vous pouvez laisser un bon d'achat pour commander un appareil moderne sur votre site, mais ça risque peut-ĂȘtre d'ĂȘtre coĂ»teux đŸ€”

Mais il existe un moyen plus facile et moins onéreux de tester et d'analyser nos animations.

Mesdames et Messieurs, permettez-moi de vous prĂ©senter Chrome Devtools ! đŸ„ł

Eh oui, je vous en parlais, c’est ce qui apparaĂźt quand on clique sur “Inspecter” sur une page web. Il fait bien plus que nous aider Ă  comprendre comment une page est organisĂ©e.

Au-delĂ  de l’onglet Elements, DevTools comporte toute une sĂ©rie d’autres onglets pour inspecter, dĂ©boguer et analyser divers aspects de nos sites. Ici, c'est l’onglet Performance qui va nous intĂ©resser. Il nous permet d’enregistrer et d’analyser comment une page se charge, rĂ©agit, et s’anime.

Ça paraĂźt ĂȘtre pas mal pour Ă©valuer la performance de nos animations, non ? Alors ouvrons DevTools et voyons ça !

Ouvrez la boĂźte Ă  outils DevTools

Avant de commencer l’exploration de l’onglet Performance, nous devons ouvrir DevTools. Vous avez probablement l’habitude de faire un clic droit sur un Ă©lĂ©ment d’une page et de choisir “Inspecter”.

Mais il existe un moyen plus rapide pour le faire. DevTools peut ĂȘtre ouvert par le raccourci clavier Ctrl+Shift+I sous Windows, ou Cmd+Opt+I sur Mac.

Une fois DevTools ouvert, en haut de la fenĂȘtre, on peut trouver une sĂ©rie de boutons qui amĂšnent Ă  diffĂ©rents onglets. Si l’onglet Performance n’est pas visible Ă  droite de l’onglet ÉlĂ©ments, selon la taille de votre fenĂȘtre, vous pouvez l’ouvrir en cliquant sur la double flĂšche Ă  droite, et en sĂ©lectionnant “Performance” dans le menu qui apparaĂźt :

Une vidéo montrant comment accéder à l'onglet Performance

Maintenant que l’onglet Performance est ouvert, nous arrivons sur une fenĂȘtre plutĂŽt spartiate  en apparence. En effet, celle-ci contient juste quelques boutons et des instructions disant que nous pouvons cliquer sur le bouton “Record” pour enregistrer, ou cliquer sur le bouton du dessous pour enregistrer le chargement de la page :

Illustration du bouton record

Mais avant de cliquer sur l’un de ces boutons, ajustons un peu notre installation. En haut de la fenĂȘtre se trouve une case “Screenshots”. Si on coche la case, Chrome prendra une capture d’écran de chaque image de l’enregistrement, nous permettant ainsi de visionner le dĂ©roulement de l’animation image par image. Cette option n’est pas toujours nĂ©cessaire pour analyser les performances d’un site, comme quand il s’agit de performances rĂ©seau, mais l’animation est un domaine trĂšs visuel, l’option screenshot peut donc s'avĂ©rer particuliĂšrement utile. Nous allons donc cocher cette case Screenshots :

Une image montrant comment accéder à Screenshots

Nous voilĂ  presque prĂȘts Ă  commencer l’enregistrement. Mais avant, il nous reste une derniĂšre chose Ă  faire. Rappelez-vous que nous voulons voir nos animations telles qu’elles apparaissent sur des appareils plus lents. Or, si on enregistre maintenant, on verra seulement l’animation s’exĂ©cuter sur notre ordinateur. Pour remĂ©dier Ă  cela, l’onglet Performance nous permet de brider la vitesse de notre processeur.

En cliquant sur la roue de paramĂ©trages dans le coin en haut Ă  droite, quatre options apparaissent, dont l’option “CPU throttling”. Simulons l’appareil le plus lent possible en choisissant 6X, qui limite notre processeur Ă  une vitesse six fois plus lente que ses capacitĂ©s (n'oubliez surtout pas de dĂ©cocher cette case quand vous aurez terminĂ©, sinon votre navigateur pourrait trĂšs rapidement vous rendre complĂštement fou 😂) :

Vidéo montrant comment accéder à l'option CPU throttling

Observez les performances dans le détail

Nous voilĂ  fin prĂȘts Ă  commencer l’inspection de nos animations ! Les performances de la page ne nous prĂ©occupent pas pour l’instant, donc nous pouvons immĂ©diatement appuyer sur le bouton Record. Quand on clique sur ce bouton Record, une fenĂȘtre de dialogue apparaĂźt pour nous informer que l’enregistrement du site a commencĂ©. Nous pouvons donc maintenant interagir avec notre bouton pour lancer les transitions. Une fois que les animations sont terminĂ©es, on peut cliquer sur le bouton “Stop” dans la fenĂȘtre de progression :

Une vidéo montrant l'analyse de l'animation

Et c’est tout ! DevTools prend un instant pour traiter les donnĂ©es recueillies, puis les affiche dans l’onglet Performance.

Décomposons maintenant tout cela étape par étape.

Détail de l'outil Performances des Devtools

Tout en haut, on trouve l’avancement de l’enregistrement, en millisecondes. Sur cette ligne, des graphiques verts suivent les FPS de notre site ; les plateaux correspondent aux Ă©vĂ©nements d’animation que nous allons dĂ©tailler dans un instant. Et juste sous cette ligne d’avancement se trouve une succession des images que DevTools a enregistrĂ©es.

Quand on passe la souris sur un des aperçus, il s’agrandit et nous montre exactement Ă  quoi ressemblait le site Ă  ce moment prĂ©cis :

 Une animation d'un bloc de texte caché derriÚre un autre

Regardons notre animation de plus prÚs en zoomant sur une des zones vertes. Pour cela, cliquez puis faites glisser votre souris sur la zone qui vous intéresse, ou bien utilisez la molette de la souris :

L'animation analysée dans Devtools

Maintenant que nous sommes entrĂ©s dans les dĂ©tails de la partie animation de l’enregistrement, concentrons-nous sur les cases vertes plus bas. Elles correspondent aux images de notre animation. En passant la souris dessus, nous pouvons voir le temps de calcul de chaque image, et le nombre de FPS :

 La calcul du FPS de l'animation

On peut constater des changements assez faibles entre chaque image, ce qui est normal, mais globalement, chaque image est proche de notre objectif de 60 FPS : c'est parfait ! Nous pouvons donc affirmer avec certitude que nos transitions seront bien fluides, mĂȘme sur un appareil six fois plus lent que notre ordinateur.

Passez vos images au crible

Allons voir ce qui se passe lorsque le navigateur calcule une image dans une animation. Pour cela, choisissez une image et zoomez au maximum.

Le zoom pour mieux visualiser le moment de l'animation que l'on cherche

Maintenant que nous avons isolĂ© une image dans l’animation, intĂ©ressons-nous Ă  la section “Main” de l’onglet Performance. Cette section permet de voir tous les calculs qui ont transformĂ© notre code en une page web animĂ©e. Les calculs sont rĂ©partis en catĂ©gories identifiĂ©es par des codes couleurs.

Les blocs violets reprĂ©sentent les calculs de base qui permettent l’affichage d’une page web, comme l’analyse du CSS et le calcul des styles.

Représentation des blocs violets

Les blocs jaunes indiquent des calculs de l'Ă©tape layout, mais
 hourra, il n’y en a pas ici ! Qu'est-ce que je vous avais dit ? 😏 GrĂące Ă  la propriĂ©tĂ©  transform, nous avons Ă©vitĂ© tout calcul de layout, bien trop gourmand en calcul, ce qui aurait dĂ©gradĂ© notre FPS.

Mais si notre image ne comporte pas de calculs de layout, elle comprend bien une case verte, qui reprĂ©sente un calcul de paint ou de composition. En passant la souris dessus, nous voyons qu’il s’agit bien d’un calcul de composition. Notre animation n’a pas non plus besoin de calculs de paint :

Calcul de paint ou de composition

Plus besoin de me croire sur parole maintenant : vous le constatez par vous-mĂȘme ! La propriĂ©tĂ© transform nous permet de crĂ©er des animations abouties en Ă©vitant des calculs complexes pour notre navigateur. Et moins de calculs signifie plus d’images par seconde, donc une meilleure fluiditĂ© ! 🚀

En résumé

  • Chrome DevTools est l'outil de prĂ©dilection des dĂ©veloppeurs. Il permet d'inspecter le code source d'une page, d'analyser les performances de notre page, de brider la performance de notre machine pour simuler un appareil plus lent. Pour cette derniĂšre option, activez l’option “CPU throttling” ;

  • l'outil Performance permet d'analyser les performances d’une page, notamment le taux d’images par seconde d’une animation ;

  • on peut utiliser l’onglet Performance pour analyser nos animations, ce qui permet de repĂ©rer les problĂšmes dans notre code qui pourraient causer des problĂšmes de fluiditĂ© sur certains supports ;

  • zoomer sur une image prĂ©cise d’une animation permet de dĂ©tailler les calculs effectuĂ©s par le navigateur, que nous avions vus dans le chapitre sur le fonctionnement du navigateur.

Dans le chapitre suivant, nous aborderons enfin l'autre propriété dont nous disposons pour assurer un FPS optimal : opacity. Nous apprendrons à maßtriser cette propriété pour créer des animations en couleur sans déclencher de calcul de type paint dans le navigateur. Alors, à tout de suite !

Et si vous obteniez un diplĂŽme OpenClassrooms ?
  • Formations jusqu’à 100 % financĂ©es
  • Date de dĂ©but flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous