performances de rendu css - tzi.fr · performances de rendu css #welovespeed. pour avoir une...

34
Performances de rendu CSS #WeLoveSpeed

Upload: others

Post on 31-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Performances de rendu

CSS

#WeLoveSpeed

Page 2: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Pour avoir une interface fluide :Lors du défilementLors des transitions et animations CSSLors de la manipulation de contenu

D'accord, mais pourquoi ?D'accord, mais pourquoi ?D'accord, mais pourquoi ?D'accord, mais pourquoi ?D'accord, mais pourquoi ?

2

Page 3: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Airbnb a réduit ses ombres de boîte pour améliorer les performances dedéfilement

Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?

CSS box-shadow can slow down scrolling 3

Page 4: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Thomas Zilliox

Expert CSS freelance

Auteur deDépart immédiat pour Flexbox

Qui suis-je ?Qui suis-je ?Qui suis-je ?Qui suis-je ?Qui suis-je ?

https://tzi.fr 4

Page 5: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Vous ne devriez certainement pas utiliser Flexbox pour votre gabarit, pourdes raisons de performances

Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?

Don't use flexbox for overall page layout 5

Page 6: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Il ne faut pas faire de transformations sur des images SVG !

Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?

(More Than) Doubling SVG FPS Rates at Khan Academy 6

Page 7: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Ajouter will-change: transform sur vos éléments en position:fixed et ce sera plus rapide !

Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?Le saviez-vous ?

Fix scrolling performance with CSS will-change property 7

Page 8: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Des astuces �ablesou des recettes de grand-mères ?

Page 9: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Ombres de boîteFlexboxSVGwill-change

Des astuces �ables ?Des astuces �ables ?Des astuces �ables ?Des astuces �ables ?Des astuces �ables ?

9

Page 10: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Ombres de boîte : 2011Flexbox : 2014SVG: 2014will-change : 2015

Des astuces �ables ?Des astuces �ables ?Des astuces �ables ?Des astuces �ables ?Des astuces �ables ?

10

Page 11: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Ombres de boîte : Firefox 7, Chrome 15Flexbox : Firefox 26, Chrome 32SVG : Firefox 33, Chrome 39will-change : Firefox 39, Chrome 43

Des astuces �ables ?Des astuces �ables ?Des astuces �ables ?Des astuces �ables ?Des astuces �ables ?

11

Page 12: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Apprendre :

1- Comment fonctionne un navigateur

2- Comment tester par soi-même

Comment évaluer ?Comment évaluer ?Comment évaluer ?Comment évaluer ?Comment évaluer ?

12

Page 13: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Disséquons un navigateur

Page 14: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Disséquons un navigateurDisséquons un navigateurDisséquons un navigateurDisséquons un navigateurDisséquons un navigateur

14

Page 15: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

1- layout : calcule la taille et la position de chaque noeud

Le layout est une étape bloquante.

LayoutLayoutLayoutLayoutLayout

15

Page 16: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

CSS Re�ow - Firefox Download Page

LayoutLayoutLayoutLayoutLayout

http://pixeln3rd.github.io/cssreflow/ 16

Page 17: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

2- paint : calcule chaque pixel pour chaque noeud

Les données sont alors chargées dans la carte graphique.

PaintPaintPaintPaintPaint

17

Page 18: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

3- composition : affichage des pixels à l'écran

Une étape plutôt rapide !

CompositionCompositionCompositionCompositionComposition

18

Page 19: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Lors d'une transition sur width , on déclenche un layout.

Ce sera difficile pour le navigateur !

ExempleExempleExempleExempleExemple

https://csstriggers.com/ 19

Page 20: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Lors d'une transition sur transform , c'est une composition.

Ce sera facile pour le navigateur !

ExempleExempleExempleExempleExemple

https://csstriggers.com/ 20

Page 21: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

La composition, c'est seulement 3 propriétés possibles :

1- opacity

2- transform

3- filter

TransitionsTransitionsTransitionsTransitionsTransitions

21

Page 22: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

filter est supporté par tous les navigateurs récents !

CSS �ltersCSS �ltersCSS �ltersCSS �ltersCSS �lters

CSS Filters Playground 22

Page 23: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Attraper les repaintsAttraper les tous...

Page 24: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

On peut identifier les layouts et les paints grâce aux Dev Tools.

Les outils pour les paints sont plus visuels !

Pourquoi les repaints ?Pourquoi les repaints ?Pourquoi les repaints ?Pourquoi les repaints ?Pourquoi les repaints ?

24

Page 25: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Chrome Dev Tools

Dev Tools ChromeDev Tools ChromeDev Tools ChromeDev Tools ChromeDev Tools Chrome

https://peertube.xyz/videos/watch/fd31b24e-72c7-4293-adba-8fb130a036ad 25

Page 26: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Firefox Dev Tools

Dev Tools FirefoxDev Tools FirefoxDev Tools FirefoxDev Tools FirefoxDev Tools Firefox

https://peertube.xyz/videos/watch/970bc78a-5335-4913-83ee-06919ed2ce2e 26

Page 27: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Recettes de grand-mèresou non ?

Page 28: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

C'est encore utile pour Chrome,mais plus pour Firefox.

will-changewill-changewill-changewill-changewill-change

28

Page 29: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

On peut faire des transformations sur les SVG,mais pas sur un sous-élément.

SVGSVGSVGSVGSVG

https://bugs.chromium.org/p/chromium/issues/detail?id=688243 29

Page 30: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Flexbox n'est pas lent,mais c'était vrai de la première syntaxe.

FlexboxFlexboxFlexboxFlexboxFlexbox

https://developers.google.com/web/updates/2013/10/Flexbox-layout-isn-t-slow 30

Page 31: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Les ombres portées ne sont pas redessinées au défilement,mais cette histoire était à propos des Chromebook.

Ombre de boîteOmbre de boîteOmbre de boîteOmbre de boîteOmbre de boîte

31

Page 32: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

ConclusionIl faut tester et ne croire personne !

(même pas moi)

Page 33: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de

Des questions ?

@iamtzihttps://tzi.fr/slides/speed2018

https://tzi.fr/slides/speed2018.pdf

Merci !Merci !Merci !Merci !Merci !

33

Page 34: Performances de rendu CSS - tzi.fr · Performances de rendu CSS #WeLoveSpeed. Pour avoir une interface fluide : Lors du défilement Lors des transitions et animations CSS Lors de