retours sur le concours webperf 2010

58
Performances Web Concours #webperf 2010 Jean-pierre VINCENT

Upload: jean-pierre-vincent

Post on 02-Jul-2015

1.498 views

Category:

Technology


0 download

DESCRIPTION

Les retours sur le concours

TRANSCRIPT

Page 1: Retours sur le concours Webperf 2010

Performances Web

Concours #webperf 2010

Jean-pierre VINCENT

Page 2: Retours sur le concours Webperf 2010

Qui ça ?Jean-pierre VINCENT

braincracking.org (veille techno)@theystolemynick

10 ans de WebConsultant, formateur, expertise

Page 3: Retours sur le concours Webperf 2010
Page 4: Retours sur le concours Webperf 2010

Le retour des soirées

Page 5: Retours sur le concours Webperf 2010

Des chiffres● 30 jours (nov. 2010)● 250 inscriptions● 55 participants● 2 tiers de français● 3 gagnants

Page 6: Retours sur le concours Webperf 2010

La cible● 1 site : www.fnac.com/enfants.asp ●

Page 7: Retours sur le concours Webperf 2010

La cible● www.fnac.com/enfants.asp ● En version statique :• Onload 17s• Start render 4s

Page 8: Retours sur le concours Webperf 2010

La cible● www.fnac.com/enfants.asp ● En version statique :• Start render 4s• Freeze au démarrage

Page 9: Retours sur le concours Webperf 2010

Le résultat

Page 10: Retours sur le concours Webperf 2010

Les basesCache navigateur

<IfModule mod_expires.c>ExpiresActive OnExpiresByType image/jpeg "access plus 10 years"# ../..</IfModule>

Page 11: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip<IfModule mod_gzip.c>mod_gzip_on yesmod_gzip_dechunk yesmod_gzip_item_include file \.(html|txt|css|js|json)$mod_gzip_item_exclude file \.(jpg|png|gif|ico)$</IfModule>

Page 12: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie•

Page 13: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie• 0.5KoTEST=ok; OrderInSession=0; accept=ok; UID=0E3649C79-3AFD-18B8-7817-FA868BC99668; SID=e85f0b48-ae1d-a5f5-aa15-fbffdc4e1c1a; TTL=241020101353; s_cc=true; campaign=FnacAff; s_ev14=%5B%5B%27FnacAff%27%2C%271291388510515%27%5D%5D; s_cpc=1; s_sq=%5B%5BB%5D%5D

Page 14: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie• 0.5KoTEST=ok; OrderInSession=0; accept=ok; UID=0E3649C79-3AFD-18B8-7817-FA868BC99668; SID=e85f0b48-ae1d-a5f5-aa15-fbffdc4e1c1a; TTL=241020101353; s_cc=true; campaign=FnacAff; s_ev14=%5B%5B%27FnacAff%27%2C%271291388510515%27%5D%5D; s_cpc=1; s_sq=%5B%5BB%5D%5D

115 fois

Page 15: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie• Sous-domaines pour statiques•

Page 16: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie• Sous-domaines pour statiques• Redéfinir le cookie sur www.*

Page 17: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie● Les images• Origine : 80 images pour 500Ko•

Page 18: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie● Les images• Origine : 80 images pour 500Ko• Jouable : 250Ko

Page 19: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie● Les images• Passage en PNG 8bit• Réduction du nombre de couleurs• Outils (jpgtran, pngcrush ...)

Page 20: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie● Les images● Concaténer, minifier JS et CSS• Outils !

Page 21: Retours sur le concours Webperf 2010

Les bases● Cache navigateur● Compression gzip● Le cookie● Les images● Concaténer, minifier JS et CSS• Outils !

Page 22: Retours sur le concours Webperf 2010

Techniques de la mort

Die HTTP, Die

Page 23: Retours sur le concours Webperf 2010

Die CSS !Le CSS ?

● Requête bloquante

● Mais indispensable

Page 24: Retours sur le concours Webperf 2010

Die CSS !Techniques de base :

✓ Minifié / concaténé / gzipé

Page 25: Retours sur le concours Webperf 2010

Die CSS !Techniques de base :

✓ Minifié / concaténé / gzipé

⚠ Nettoyage (28Ko => 12 Ko)

Page 26: Retours sur le concours Webperf 2010

Die CSS !Chargement non bloquant du CSS :

● Start render : 200ms !

Page 27: Retours sur le concours Webperf 2010

Die CSS !FOUC (1s)

Page 28: Retours sur le concours Webperf 2010

Die CSS !Chargement non bloquant du CSS :

● Start render : 200ms !

⚠ FOUC

Page 29: Retours sur le concours Webperf 2010

Die CSS !Chargement non bloquant du CSS :

● Start render : 200ms !

⚠ FOUC

✗ Dépendance JS

Page 30: Retours sur le concours Webperf 2010

Die CSS !

CSS inline ?

Page 31: Retours sur le concours Webperf 2010

Die CSS !CSS inline :

✓ Bon premier rendu

✓ Pas de dépendance JS

✗ Pas de cache

Page 32: Retours sur le concours Webperf 2010

Die CSS !CSS inline + chargement non

bloquant:

Page 33: Retours sur le concours Webperf 2010

Die CSS !En inline : layout

Page 34: Retours sur le concours Webperf 2010

Die CSS !Externe, non bloquant : le reste

Page 35: Retours sur le concours Webperf 2010

Die CSS !CSS inline + chargement non

bloquant :

✓ Bon premier rendu

✓ Cache

Page 36: Retours sur le concours Webperf 2010

Die CSS !CSS inline + chargement non

bloquant :

✓ Bon premier rendu

✓ Cache

✓ Pas de dépendance JS (noscript)

Page 37: Retours sur le concours Webperf 2010

Die CSS !CSS inline + chargement non

bloquant :

Layout inline,

● Externe : le reste

● Utilisation de <noscript>

Page 38: Retours sur le concours Webperf 2010

Die JS !Le JS ?

● Requête bloquante

● Mais indispensable

● 60Ko (gzipé)

Page 39: Retours sur le concours Webperf 2010

Die JS !JS concaténé, minifié, gzipé ...

Page 40: Retours sur le concours Webperf 2010

Die JS !JavaScript defer, chargement asynchrone

Page 41: Retours sur le concours Webperf 2010

Die JS !JavaScript defer, chargement asynchrone

⚠ Correction des dépendances inlines

Page 42: Retours sur le concours Webperf 2010

Die JS !JS : paralléliser

✓ Gain : 70ms :)⚠ Dépendances

Page 43: Retours sur le concours Webperf 2010

Die HTTP !

La foire au lazy-loading

Page 44: Retours sur le concours Webperf 2010

Die HTTP !

Lazy-load des images produits :

Moins de poids + Moins de requêtes + Super scores = Meilleur classement

Page 45: Retours sur le concours Webperf 2010

Die HTTP !

Lazy-load des images produits :

Moins de poids + Moins de requêtes + Super scores ≠ Expérience utilisateur !

Page 46: Retours sur le concours Webperf 2010

Die HTTP !

Lazy-load des images produits :

✗ onmousemove

Page 47: Retours sur le concours Webperf 2010

Die HTTP !

Lazy-load des images produits :

✗ onmousemove ✗ Dépendance à JS

Page 48: Retours sur le concours Webperf 2010

Die HTTP !

Lazy-load des images produits :

✗ onmousemove ✗ Dépendance à JS

✓ La solution : JS + noscript

Page 49: Retours sur le concours Webperf 2010

Die HTTP !

● Lazy-load de l'iframe du footer

● Lazy-load du JS de l'autocomplete

Page 50: Retours sur le concours Webperf 2010

Die HTTP ! Encodage des images

● Encodage en base64● data:uri / MHTML● Dans CSS ou dans le HTML

Page 51: Retours sur le concours Webperf 2010

Die HTTP ! Encodage des images✓ 0 requêtes

⚠ +30% de poids⚠ Dans le HTML : pas de cache⚠ CSS spécifiques IE

Page 52: Retours sur le concours Webperf 2010

Die HTTP ! Encodage des images

⚠ La surprise : le coût CPU

Page 53: Retours sur le concours Webperf 2010

Die HTTP !1 query to rule them all

Bien tenté ;)

Page 54: Retours sur le concours Webperf 2010

Dernière technique ultime

Savoir coder

Page 55: Retours sur le concours Webperf 2010

Savoir coderPage de départ :

● 213Ko● 2000 noeuds DOM● Validateur : 2300 parse error

« Sensation » de lenteur

Page 56: Retours sur le concours Webperf 2010

Savoir coderRefactoring complet du HTML :

● Poids -50%● nœuds DOM -50%● Correction des erreurs● Plus d'imbrication de tableaux

= « Sensation » de fluidité

Page 57: Retours sur le concours Webperf 2010

Savoir coderRefactoring complet du CSS :● Reset pour supprimer des règles● Suppression des filter()● Dégradation gracieuse acceptée● Utilisation de :before● Dégradé avec un png transparent

Page 58: Retours sur le concours Webperf 2010

Conclusions

● Temps d'affichage divisé par 10● Techniques universelles : 70% du gain

● Temps > connaissances● Bonnes pratiques : #win● L'ère des grandes découvertes est finie ?● À quand le prochain concours ?