TL;DR
À partir de Chrome 53, l'ensemble du contenu est re-rastrillé lorsque son échelle de transformation change, s'il ne possède pas la propriété CSS will-change: transform
. En d'autres termes, will-change: transform
signifie "veuillez l'animer rapidement".
Cela ne s'applique qu'aux échelles de transformation qui se produisent via la manipulation de script et ne s'applique pas aux animations CSS ni aux animations Web.
Cela signifie que le contenu de votre site sera probablement plus attrayant, mais il risque également d'être plus lent sans les modifications simples décrites ci-dessous.
Implications pour les développeurs Web
Avec ce changement, will-change: transform
peut être considéré comme forçant le contenu à être rasterisé dans un bitmap fixe, qui ne change jamais par la suite en cas de mise à jour de la transformation. Cela permet aux développeurs d'augmenter la vitesse des animations de transformation sur ce bitmap, par exemple en le déplaçant, en le faisant pivoter ou en le redimensionnant.
Nous ne faisons pas la distinction entre les transformations de mise à l'échelle et de translation.
Actions recommandées
Placez will-change: transform
sur les éléments lorsque vous avez besoin de vitesses d'animation de transformation très rapides (en d'autres termes, 60 FPS). En effet, le rastérisation de l'élément en haute qualité à chaque frame n'est pas assez rapide. Sinon, évitez will-change: transform
.
Pour optimiser le compromis entre performances et qualité, vous pouvez ajouter will-change:
transform
au début des animations et le supprimer à la fin. Sachez toutefois qu'ajouter ou supprimer des will-change: transform
entraîne souvent un coût de performances unique important.
Autres considérations concernant l'implémentation
La suppression de will-change: transform
entraîne le tramage du contenu à une échelle nette, mais uniquement sur le prochain frame d'animation (via requestAnimationFrame)
. Par conséquent, si vous avez un calque avec will-change: transform
et que vous souhaitez simplement déclencher un re-rastrer, mais ensuite continuer l'animation, vous devez supprimer will-change:transform, puis l'ajouter à nouveau dans un requestAnimationFrame() c
allback.
Si vous souhaitez effectuer un tramage à l'échelle actuelle à un moment donné de l'animation, appliquez la technique ci-dessus pour supprimer will-change:
transform
dans un frame, puis l'ajouter à nouveau dans un frame ultérieur.
Cela peut avoir pour effet secondaire de faire perdre au contenu sa couche composite, ce qui rend la recommandation ci-dessus quelque peu coûteuse. Si c'est un problème, nous vous recommandons d'ajouter également transform: translateZ(0)
au contenu pour vous assurer qu'il reste dans une couche composite pendant cette opération.
Résumé de l'impact
Ce changement a des conséquences sur la qualité du contenu affiché, les performances et le contrôle du développeur.
- Qualité du contenu affiché: la sortie affichée des éléments qui animent l'échelle de transformation sera toujours nette par défaut.
- Performances: l'animation de la transformation lorsque
will-change: transform
est présente sera rapide. - Contrôle du développeur: les développeurs peuvent choisir entre la qualité et la vitesse, par élément et par frame d'animation, en ajoutant et en supprimant des
will-change: transform
.
Pour en savoir plus, consultez la documentation de conception référencée ci-dessus.
Exemples
Dans cet exemple, l'élément portant l'ID remainsBlurry
restera flou après ce changement, mais l'élément portant l'ID noLongerBlurry
deviendra net. En effet, le premier contient une propriété CSS will-
change: transform
.
Exemples d'animations de transformation de l'échelle provenant d'applications réelles
- Ce bug: Zoom sur le tigre
- Google Maps sur mobile (maps.google.com) : faire un zoom sur la carte
- Google Maps Lite sur ordinateur
- Plan des places Ticketmaster