Les performances de renduLes performances de rendu
CSSCSS
15 min pour comprendre les enjeux !15 min pour comprendre les enjeux !
Pourquoi les performances CSS ?Pourquoi les performances CSS ?
Pour obtenir des interactions fluides
Défilement (scroll)
Transition et animation CSS
Manipulation du contenu
#2
Pourquoi les performances CSS ?Pourquoi les performances CSS ?
Pour l'image, l'immersion et l'accessibilité !
Parce que le rendu était trop lent, ils ont
diminué l'ombre dans leur design.
— airbnb, bit.ly/airbnb-shadow
Le rendu CSS est l'un des trois principaux
facteurs de lenteurs JavaScript.
— Opera, bit.ly/opera-css-perfs
#3
Pourquoi les performances CSS ?Pourquoi les performances CSS ?
Ne pas faire de transition ou d'animation CSS
avec une autre propriété que
opacity
transform
(translation, rotation, redimensionnement, ...)
filter
(flou, luminosité, contraste, niveau de gris, ...)
#4
Pourquoi les performances CSS ?Pourquoi les performances CSS ?
On va essayer de diminuer la zone "boîte noire"
#5
Pourquoi les performances CSS ?Pourquoi les performances CSS ?
Ne pas faire de transition ou d'animation CSS
avec une autre propriété que
opacity
transform
filter
#6
Thomas ZillioxThomas Zilliox
Développeur freelanceDéveloppeur freelance
Expert CSS : maintenabilité et performanceExpert CSS : maintenabilité et performance
Comment les navigateursComment les navigateurs
passentpassent
du CSS aux pixelsdu CSS aux pixels
Du CSS aux pixelsDu CSS aux pixels
Les navigateurs web ont, à peu près,
deux fils d'exécution pour le rendu
Le principal (Main)
Celui de composition (Compositor)
— Adobe, bit.ly/inside-the-browser
#9
Du CSS aux pixelsDu CSS aux pixels
Le fil principal se charge de
Calculer les règles CSS
La mise en page (Layout / Reflow)
Calculer chaque pixels (Painting / Draw)
— Ilya Grigorik, bit.ly/process-pipeline
#10
Du CSS aux pixelsDu CSS aux pixels
Le fil de composition se charge principalement
de dessiner les pixels sur l'écran
#11
ObjectifObjectif
16ms16ms
Objectif 16msObjectif 16ms
Chaque frame doit prendre maximum 16ms
pour garder une fréquence d'images à 60fps
— Youtube, youtu.be/pfiHFqnPLZ4
#13
0:000:00
Objectif 16msObjectif 16ms
Le premier rendu d'un élément
#14
Objectif 16msObjectif 16ms
Lorsqu'on anime la largeur d'un élément, on
déclenche un re-layout
Aucune autre action utilisateur n'est possible
pendant la mise en page.
— Google, bit.ly/layout-engine
#15
Objectif 16msObjectif 16ms
Lorsqu'on anime une transformation sur un
élément, on reste dans la composition
— Paul Lewis (Google), https://csstriggers.com
#16
Objectif 16msObjectif 16ms
Ne pas faire de transition ou d'animation CSS
avec une autre propriété que
opacity
transform
filter
#17
Des outilsDes outils
pourpour
InvestiguerInvestiguer
Des outils pour investiguerDes outils pour investiguer
Détecter les reflows (Console de Firefox)
#19
0:000:00
Des outils pour investiguerDes outils pour investiguer
Détecter les repaints (Console de Chrome)
#20
0:000:00
Des outils pour investiguerDes outils pour investiguer
Investiguer les repaints (Timeline de Chrome)
#21
Des outils pour investiguerDes outils pour investiguer
Les éléments fixes sont redessinés au
défilement
#22
0:000:00
Des retours d'expériencesDes retours d'expériences
Des retours d'expériencesDes retours d'expériences
Vous pouvez créer un nouveau layer en
appliquant perspective(1px) *
* Attention quand même aux hacks magiques !
#24
0:000:00
Des retours d'expériencesDes retours d'expériences
Si vous avez une image de fond fixe au
défilement
Séparer l'image sur un élément à part
Créer un nouveau layer pour cet élément
— Four Kitchens, http://bit.ly/bg-fixed-perfs
#25
Des retours d'expériencesDes retours d'expériences
Pour animer l'ajout d'une ombre sur un élément
Séparer l'ombre sur un élément à part
Animer l'opacité de cet élément
— Tobias Ahlin, http://bit.ly/animate-shadow
#26
ConclusionConclusion
ConclusionConclusion
Ne pas faire de transition ou d'animation CSS
avec une autre propriété que
opacity
transform
filter
#28
Merci ;)Merci ;)
tzi.fr ou @iamtzitzi.fr ou @iamtzi
Visualiser le reflowVisualiser le reflow
— CSSReflow (Mozilla), bit.ly/cssreflow
#30
0:000:00
Les sources du reflowLes sources du reflow
Elle est déclanchée par
Modification du DOM, dont le contenu
Prise de mesure
( offsetHeight ou getComputedStyle )
Modification de l'attribut class
Modification des styles CSS
Le redimenssionnement de la fenêtre
Le scroll
#31
Les retours d'expérienceLes retours d'expérience
Créer un nouveau layer
translateZ(0)
perspective(1px)
will-change *
* Mais attention will-change will change
— GreenSock, greensock.com/will-change
#32

Les performances de rendu CSS

  • 1.
    Les performances derenduLes performances de rendu CSSCSS 15 min pour comprendre les enjeux !15 min pour comprendre les enjeux !
  • 2.
    Pourquoi les performancesCSS ?Pourquoi les performances CSS ? Pour obtenir des interactions fluides Défilement (scroll) Transition et animation CSS Manipulation du contenu #2
  • 3.
    Pourquoi les performancesCSS ?Pourquoi les performances CSS ? Pour l'image, l'immersion et l'accessibilité ! Parce que le rendu était trop lent, ils ont diminué l'ombre dans leur design. — airbnb, bit.ly/airbnb-shadow Le rendu CSS est l'un des trois principaux facteurs de lenteurs JavaScript. — Opera, bit.ly/opera-css-perfs #3
  • 4.
    Pourquoi les performancesCSS ?Pourquoi les performances CSS ? Ne pas faire de transition ou d'animation CSS avec une autre propriété que opacity transform (translation, rotation, redimensionnement, ...) filter (flou, luminosité, contraste, niveau de gris, ...) #4
  • 5.
    Pourquoi les performancesCSS ?Pourquoi les performances CSS ? On va essayer de diminuer la zone "boîte noire" #5
  • 6.
    Pourquoi les performancesCSS ?Pourquoi les performances CSS ? Ne pas faire de transition ou d'animation CSS avec une autre propriété que opacity transform filter #6
  • 7.
    Thomas ZillioxThomas Zilliox DéveloppeurfreelanceDéveloppeur freelance Expert CSS : maintenabilité et performanceExpert CSS : maintenabilité et performance
  • 8.
    Comment les navigateursCommentles navigateurs passentpassent du CSS aux pixelsdu CSS aux pixels
  • 9.
    Du CSS auxpixelsDu CSS aux pixels Les navigateurs web ont, à peu près, deux fils d'exécution pour le rendu Le principal (Main) Celui de composition (Compositor) — Adobe, bit.ly/inside-the-browser #9
  • 10.
    Du CSS auxpixelsDu CSS aux pixels Le fil principal se charge de Calculer les règles CSS La mise en page (Layout / Reflow) Calculer chaque pixels (Painting / Draw) — Ilya Grigorik, bit.ly/process-pipeline #10
  • 11.
    Du CSS auxpixelsDu CSS aux pixels Le fil de composition se charge principalement de dessiner les pixels sur l'écran #11
  • 12.
  • 13.
    Objectif 16msObjectif 16ms Chaqueframe doit prendre maximum 16ms pour garder une fréquence d'images à 60fps — Youtube, youtu.be/pfiHFqnPLZ4 #13 0:000:00
  • 14.
    Objectif 16msObjectif 16ms Lepremier rendu d'un élément #14
  • 15.
    Objectif 16msObjectif 16ms Lorsqu'onanime la largeur d'un élément, on déclenche un re-layout Aucune autre action utilisateur n'est possible pendant la mise en page. — Google, bit.ly/layout-engine #15
  • 16.
    Objectif 16msObjectif 16ms Lorsqu'onanime une transformation sur un élément, on reste dans la composition — Paul Lewis (Google), https://csstriggers.com #16
  • 17.
    Objectif 16msObjectif 16ms Nepas faire de transition ou d'animation CSS avec une autre propriété que opacity transform filter #17
  • 18.
  • 19.
    Des outils pourinvestiguerDes outils pour investiguer Détecter les reflows (Console de Firefox) #19 0:000:00
  • 20.
    Des outils pourinvestiguerDes outils pour investiguer Détecter les repaints (Console de Chrome) #20 0:000:00
  • 21.
    Des outils pourinvestiguerDes outils pour investiguer Investiguer les repaints (Timeline de Chrome) #21
  • 23.
    Des outils pourinvestiguerDes outils pour investiguer Les éléments fixes sont redessinés au défilement #22 0:000:00
  • 24.
    Des retours d'expériencesDesretours d'expériences
  • 25.
    Des retours d'expériencesDesretours d'expériences Vous pouvez créer un nouveau layer en appliquant perspective(1px) * * Attention quand même aux hacks magiques ! #24 0:000:00
  • 26.
    Des retours d'expériencesDesretours d'expériences Si vous avez une image de fond fixe au défilement Séparer l'image sur un élément à part Créer un nouveau layer pour cet élément — Four Kitchens, http://bit.ly/bg-fixed-perfs #25
  • 27.
    Des retours d'expériencesDesretours d'expériences Pour animer l'ajout d'une ombre sur un élément Séparer l'ombre sur un élément à part Animer l'opacité de cet élément — Tobias Ahlin, http://bit.ly/animate-shadow #26
  • 28.
  • 29.
    ConclusionConclusion Ne pas fairede transition ou d'animation CSS avec une autre propriété que opacity transform filter #28
  • 30.
    Merci ;)Merci ;) tzi.frou @iamtzitzi.fr ou @iamtzi
  • 31.
    Visualiser le reflowVisualiserle reflow — CSSReflow (Mozilla), bit.ly/cssreflow #30 0:000:00
  • 32.
    Les sources dureflowLes sources du reflow Elle est déclanchée par Modification du DOM, dont le contenu Prise de mesure ( offsetHeight ou getComputedStyle ) Modification de l'attribut class Modification des styles CSS Le redimenssionnement de la fenêtre Le scroll #31
  • 33.
    Les retours d'expérienceLesretours d'expérience Créer un nouveau layer translateZ(0) perspective(1px) will-change * * Mais attention will-change will change — GreenSock, greensock.com/will-change #32