SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
Performances Web


Concours #webperf 2010




                  Jean-pierre VINCENT
Qui ça ?
       Jean-pierre VINCENT

braincracking.org (veille techno)
@theystolemynick

10 ans de Web
Consultant, formateur, expertise
Le retour des soirées
Des chiffres
● 30 jours (nov. 2010)
● 250 inscriptions

● 55 participants

● 2 tiers de français

● 3 gagnants
La cible
●   1 site : www.fnac.com/enfants.asp
●
La cible
● www.fnac.com/enfants.asp
● En version statique :


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


   • Start render 4s
   • Freeze au démarrage
Le résultat
Les bases
Cache navigateur
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 10 years"
# ../..
</IfModule>
Les bases
● Cache navigateur
● Compression gzip

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

● Le cookie


   •
Les bases
● Cache navigateur
● Compression gzip

● Le cookie


   • 0.5Ko
     TEST=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
Les bases
● Cache navigateur
● Compression gzip

● Le cookie


   • 0.5Ko
     TEST=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
Les bases
● Cache navigateur
● Compression gzip

● Le cookie


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

● Le cookie


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

● Le cookie

● Les images


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

● Le cookie

● Les images


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

● Le cookie

● Les images


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

● Le cookie

● Les images

● Concaténer, minifier JS et CSS


   • Outils !
Les bases
● Cache navigateur
● Compression gzip

● Le cookie

● Les images

● Concaténer, minifier JS et CSS


   • Outils !
Techniques de la mort

      Die HTTP, Die
Die CSS !
Le CSS ?

●   Requête bloquante

●   Mais indispensable
Die CSS !
Techniques de base :

✓ Minifié / concaténé / gzipé
Die CSS !
Techniques de base :

✓ Minifié / concaténé / gzipé

⚠ Nettoyage (28Ko => 12 Ko)
Die CSS !
Chargement non bloquant du CSS :

●   Start render : 200ms !
Die CSS !
 FOUC (1s)
Die CSS !
Chargement non bloquant du CSS :

●   Start render : 200ms !

⚠ FOUC
Die CSS !
Chargement non bloquant du CSS :

●   Start render : 200ms !

⚠ FOUC

✗ Dépendance JS
Die CSS !


CSS inline ?
Die CSS !
CSS inline :

✓ Bon premier rendu

✓ Pas de dépendance JS

✗ Pas de cache
Die CSS !
 CSS inline + chargement non
bloquant:
Die CSS !
En inline : layout
Die CSS !
Externe, non bloquant : le reste
Die CSS !
 CSS inline + chargement non
bloquant :

✓ Bon premier rendu

✓ Cache
Die CSS !
 CSS inline + chargement non
bloquant :

✓ Bon premier rendu

✓ Cache

✓ Pas de dépendance JS (noscript)
Die CSS !
 CSS inline + chargement non
bloquant :

Layout inline,

●   Externe : le reste

●   Utilisation de <noscript>
Die JS !
Le JS ?

●   Requête bloquante

●   Mais indispensable

●   60Ko (gzipé)
Die JS !
JS concaténé, minifié, gzipé ...
Die JS !
JavaScript defer, chargement asynchrone
Die JS !
JavaScript defer, chargement asynchrone

⚠ Correction des dépendances inlines
Die JS !
JS : paralléliser



✓ Gain : 70ms :)
⚠ Dépendances
Die HTTP !



La foire au lazy-loading
Die HTTP !

Lazy-load des images produits :

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

Lazy-load des images produits :

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

Lazy-load des images produits :

✗ onmousemove
Die HTTP !

Lazy-load des images produits :

✗ onmousemove
✗ Dépendance à JS
Die HTTP !

Lazy-load des images produits :

✗ onmousemove
✗ Dépendance à JS

✓ La solution : JS + noscript
Die HTTP !
●   Lazy-load de l'iframe du footer

●   Lazy-load du JS de l'autocomplete
Die HTTP !
Encodage des images

● Encodage en base64
● data:uri / MHTML

● Dans CSS ou dans le HTML
Die HTTP !
Encodage des images
✓ 0 requêtes
⚠ +30% de poids
⚠ Dans le HTML : pas de cache
⚠ CSS spécifiques IE
Die HTTP !
Encodage des images

⚠ La surprise : le coût CPU
Die HTTP !
1 query to rule them all




     Bien tenté ;)
Dernière technique
      ultime


     Savoir coder
Savoir coder
Page de départ :

● 213Ko
● 2000 noeuds DOM

● Validateur : 2300 parse error




       « Sensation » de lenteur
Savoir coder
Refactoring complet du HTML :

● Poids -50%
● nœuds DOM -50%

● Correction des erreurs

● Plus d'imbrication de tableaux




      = « Sensation » de fluidité
Savoir coder
Refactoring 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
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 ?

Más contenido relacionado

La actualidad más candente

Accélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleAccélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleJean-Pierre Vincent
 
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidementENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidementHoracio Gonzalez
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB13p
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012FastConnect
 
HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?Frédéric Harper
 
Créez votre site web vous-même 2/2
Créez votre site web vous-même 2/2Créez votre site web vous-même 2/2
Créez votre site web vous-même 2/2pro-info.be
 
HTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsHTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsJean-Pierre Vincent
 
Créez votre site web vous-même 1/2
Créez votre site web vous-même 1/2Créez votre site web vous-même 1/2
Créez votre site web vous-même 1/2pro-info.be
 
Bien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPressBien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPressAurélien Denis
 
ça marchait pourtant en dev
ça marchait pourtant en devça marchait pourtant en dev
ça marchait pourtant en devOlivier Doucet
 
HTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaHTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaJean-Pierre Vincent
 
Deboguer Avec Firephp
Deboguer Avec FirephpDeboguer Avec Firephp
Deboguer Avec FirephpDamien Seguy
 
Déboguer une application web avec FirePHP
Déboguer une application web avec FirePHPDéboguer une application web avec FirePHP
Déboguer une application web avec FirePHPJean-Marc Fontaine
 
"WP Super Cache Rocket Reloaded…" – WordCamp Bordeaux 2019
"WP Super Cache Rocket Reloaded…" – WordCamp Bordeaux 2019"WP Super Cache Rocket Reloaded…" – WordCamp Bordeaux 2019
"WP Super Cache Rocket Reloaded…" – WordCamp Bordeaux 2019Boris SCHAPIRA
 

La actualidad más candente (20)

Optimisation de son site web
Optimisation de son site webOptimisation de son site web
Optimisation de son site web
 
Accélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleAccélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exemple
 
MGD Html5 pres fr
MGD Html5 pres frMGD Html5 pres fr
MGD Html5 pres fr
 
CasperJS
CasperJSCasperJS
CasperJS
 
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidementENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB
 
Jquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter BootstrapJquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter Bootstrap
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012
 
HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?
 
Les performances Web mobile
Les performances Web mobileLes performances Web mobile
Les performances Web mobile
 
Créez votre site web vous-même 2/2
Créez votre site web vous-même 2/2Créez votre site web vous-même 2/2
Créez votre site web vous-même 2/2
 
HTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsHTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIs
 
Créez votre site web vous-même 1/2
Créez votre site web vous-même 1/2Créez votre site web vous-même 1/2
Créez votre site web vous-même 1/2
 
Bien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPressBien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPress
 
Html5 now light
Html5 now lightHtml5 now light
Html5 now light
 
ça marchait pourtant en dev
ça marchait pourtant en devça marchait pourtant en dev
ça marchait pourtant en dev
 
HTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaHTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimedia
 
Deboguer Avec Firephp
Deboguer Avec FirephpDeboguer Avec Firephp
Deboguer Avec Firephp
 
Déboguer une application web avec FirePHP
Déboguer une application web avec FirePHPDéboguer une application web avec FirePHP
Déboguer une application web avec FirePHP
 
"WP Super Cache Rocket Reloaded…" – WordCamp Bordeaux 2019
"WP Super Cache Rocket Reloaded…" – WordCamp Bordeaux 2019"WP Super Cache Rocket Reloaded…" – WordCamp Bordeaux 2019
"WP Super Cache Rocket Reloaded…" – WordCamp Bordeaux 2019
 

Similar a Retours sur le concours Webperf 2010

Inclure du Javascript de manière performante
Inclure du Javascript de manière performanteInclure du Javascript de manière performante
Inclure du Javascript de manière performanteJean-Pierre Vincent
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages webJean-Pierre Vincent
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secretsAymeric Bouillat
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...Horacio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...Horacio Gonzalez
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2Horacio Gonzalez
 
Drupagora 2012 Optimisation performances Drupal
Drupagora 2012 Optimisation performances DrupalDrupagora 2012 Optimisation performances Drupal
Drupagora 2012 Optimisation performances DrupalSkilld
 
Améliorer la rapidité de son site web
Améliorer la rapidité de son site webAméliorer la rapidité de son site web
Améliorer la rapidité de son site webEmmanuel Gautier
 
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échouéLe Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échouéPhilippe YONNET
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirYves Van Goethem
 
[JDLL 2018] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir l...
[JDLL 2018] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir l...[JDLL 2018] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir l...
[JDLL 2018] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir l...Clément OUDOT
 
Edge SEO & Cloud SEO : Comment faire du SEO dans le cloud quand tout le reste...
Edge SEO & Cloud SEO : Comment faire du SEO dans le cloud quand tout le reste...Edge SEO & Cloud SEO : Comment faire du SEO dans le cloud quand tout le reste...
Edge SEO & Cloud SEO : Comment faire du SEO dans le cloud quand tout le reste...Fasterize
 
ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)Nicolas Aguenot
 
Meetup Webperf : résumé des 3 dernières années
Meetup Webperf : résumé des 3 dernières annéesMeetup Webperf : résumé des 3 dernières années
Meetup Webperf : résumé des 3 dernières annéesJean-Pierre Vincent
 
Ma participation au WebPerf Contest 2010
Ma participation au WebPerf Contest 2010Ma participation au WebPerf Contest 2010
Ma participation au WebPerf Contest 2010Cédric MORIN
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jGabriel Pillet 🐙
 
RennesJS Talk webperf by Dareboost
RennesJS Talk webperf by DareboostRennesJS Talk webperf by Dareboost
RennesJS Talk webperf by DareboostDamien Jubeau
 

Similar a Retours sur le concours Webperf 2010 (20)

Inclure du Javascript de manière performante
Inclure du Javascript de manière performanteInclure du Javascript de manière performante
Inclure du Javascript de manière performante
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages web
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secrets
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
Introduction à la webperf
Introduction à la webperfIntroduction à la webperf
Introduction à la webperf
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
 
Drupagora 2012 Optimisation performances Drupal
Drupagora 2012 Optimisation performances DrupalDrupagora 2012 Optimisation performances Drupal
Drupagora 2012 Optimisation performances Drupal
 
Améliorer la rapidité de son site web
Améliorer la rapidité de son site webAméliorer la rapidité de son site web
Améliorer la rapidité de son site web
 
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échouéLe Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
 
[JDLL 2018] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir l...
[JDLL 2018] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir l...[JDLL 2018] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir l...
[JDLL 2018] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir l...
 
La performance sur mobile
La performance sur mobileLa performance sur mobile
La performance sur mobile
 
Edge SEO & Cloud SEO : Comment faire du SEO dans le cloud quand tout le reste...
Edge SEO & Cloud SEO : Comment faire du SEO dans le cloud quand tout le reste...Edge SEO & Cloud SEO : Comment faire du SEO dans le cloud quand tout le reste...
Edge SEO & Cloud SEO : Comment faire du SEO dans le cloud quand tout le reste...
 
ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)
 
Meetup Webperf : résumé des 3 dernières années
Meetup Webperf : résumé des 3 dernières annéesMeetup Webperf : résumé des 3 dernières années
Meetup Webperf : résumé des 3 dernières années
 
Quoi de neuf dans la webperf ?
Quoi de neuf dans la webperf ?Quoi de neuf dans la webperf ?
Quoi de neuf dans la webperf ?
 
Ma participation au WebPerf Contest 2010
Ma participation au WebPerf Contest 2010Ma participation au WebPerf Contest 2010
Ma participation au WebPerf Contest 2010
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4j
 
RennesJS Talk webperf by Dareboost
RennesJS Talk webperf by DareboostRennesJS Talk webperf by Dareboost
RennesJS Talk webperf by Dareboost
 

Más de Jean-Pierre Vincent

Mesurer la performance : onload, pages
Mesurer la performance : onload, pagesMesurer la performance : onload, pages
Mesurer la performance : onload, pagesJean-Pierre Vincent
 
Les Performance de rendu sur mobile
Les Performance de rendu sur mobileLes Performance de rendu sur mobile
Les Performance de rendu sur mobileJean-Pierre Vincent
 
Performances web - quoi de neuf ?
Performances web - quoi de neuf ?Performances web - quoi de neuf ?
Performances web - quoi de neuf ?Jean-Pierre Vincent
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyJean-Pierre Vincent
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance frontJean-Pierre Vincent
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Télés connectées et développement Web
Télés connectées et développement WebTélés connectées et développement Web
Télés connectées et développement WebJean-Pierre Vincent
 
HTML5 maintenant partie 1 : la sémantique
HTML5 maintenant partie 1 : la sémantiqueHTML5 maintenant partie 1 : la sémantique
HTML5 maintenant partie 1 : la sémantiqueJean-Pierre Vincent
 

Más de Jean-Pierre Vincent (11)

Mesurer la performance : onload, pages
Mesurer la performance : onload, pagesMesurer la performance : onload, pages
Mesurer la performance : onload, pages
 
Les Performance de rendu sur mobile
Les Performance de rendu sur mobileLes Performance de rendu sur mobile
Les Performance de rendu sur mobile
 
Performances web - quoi de neuf ?
Performances web - quoi de neuf ?Performances web - quoi de neuf ?
Performances web - quoi de neuf ?
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwiparty
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance front
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Télés connectées et développement Web
Télés connectées et développement WebTélés connectées et développement Web
Télés connectées et développement Web
 
Html5 bonnes-pratiques
Html5 bonnes-pratiquesHtml5 bonnes-pratiques
Html5 bonnes-pratiques
 
HTML5 maintenant partie 1 : la sémantique
HTML5 maintenant partie 1 : la sémantiqueHTML5 maintenant partie 1 : la sémantique
HTML5 maintenant partie 1 : la sémantique
 

Retours sur le concours Webperf 2010

  • 1. Performances Web Concours #webperf 2010 Jean-pierre VINCENT
  • 2. Qui ça ? Jean-pierre VINCENT braincracking.org (veille techno) @theystolemynick 10 ans de Web Consultant, formateur, expertise
  • 3.
  • 4. Le retour des soirées
  • 5. Des chiffres ● 30 jours (nov. 2010) ● 250 inscriptions ● 55 participants ● 2 tiers de français ● 3 gagnants
  • 6. La cible ● 1 site : www.fnac.com/enfants.asp ●
  • 7. La cible ● www.fnac.com/enfants.asp ● En version statique : • Onload 17s • Start render 4s
  • 8. La cible ● www.fnac.com/enfants.asp ● En version statique : • Start render 4s • Freeze au démarrage
  • 10. Les bases Cache navigateur <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpeg "access plus 10 years" # ../.. </IfModule>
  • 11. Les bases ● Cache navigateur ● Compression gzip <IfModule mod_gzip.c> mod_gzip_on yes mod_gzip_dechunk yes mod_gzip_item_include file .(html|txt| css|js|json)$ mod_gzip_item_exclude file .(jpg|png| gif|ico)$ </IfModule>
  • 12. Les bases ● Cache navigateur ● Compression gzip ● Le cookie •
  • 13. Les bases ● Cache navigateur ● Compression gzip ● Le cookie • 0.5Ko TEST=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
  • 14. Les bases ● Cache navigateur ● Compression gzip ● Le cookie • 0.5Ko TEST=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
  • 15. Les bases ● Cache navigateur ● Compression gzip ● Le cookie • Sous-domaines pour statiques •
  • 16. Les bases ● Cache navigateur ● Compression gzip ● Le cookie • Sous-domaines pour statiques • Redéfinir le cookie sur www.*
  • 17. Les bases ● Cache navigateur ● Compression gzip ● Le cookie ● Les images • Origine : 80 images pour 500Ko •
  • 18. Les bases ● Cache navigateur ● Compression gzip ● Le cookie ● Les images • Origine : 80 images pour 500Ko • Jouable : 250Ko
  • 19. Les bases ● Cache navigateur ● Compression gzip ● Le cookie ● Les images • Passage en PNG 8bit • Réduction du nombre de couleurs • Outils (jpgtran, pngcrush ...)
  • 20. Les bases ● Cache navigateur ● Compression gzip ● Le cookie ● Les images ● Concaténer, minifier JS et CSS • Outils !
  • 21. Les bases ● Cache navigateur ● Compression gzip ● Le cookie ● Les images ● Concaténer, minifier JS et CSS • Outils !
  • 22. Techniques de la mort Die HTTP, Die
  • 23. Die CSS ! Le CSS ? ● Requête bloquante ● Mais indispensable
  • 24. Die CSS ! Techniques de base : ✓ Minifié / concaténé / gzipé
  • 25. Die CSS ! Techniques de base : ✓ Minifié / concaténé / gzipé ⚠ Nettoyage (28Ko => 12 Ko)
  • 26. Die CSS ! Chargement non bloquant du CSS : ● Start render : 200ms !
  • 27. Die CSS ! FOUC (1s)
  • 28. Die CSS ! Chargement non bloquant du CSS : ● Start render : 200ms ! ⚠ FOUC
  • 29. Die CSS ! Chargement non bloquant du CSS : ● Start render : 200ms ! ⚠ FOUC ✗ Dépendance JS
  • 30. Die CSS ! CSS inline ?
  • 31. Die CSS ! CSS inline : ✓ Bon premier rendu ✓ Pas de dépendance JS ✗ Pas de cache
  • 32. Die CSS ! CSS inline + chargement non bloquant:
  • 33. Die CSS ! En inline : layout
  • 34. Die CSS ! Externe, non bloquant : le reste
  • 35. Die CSS ! CSS inline + chargement non bloquant : ✓ Bon premier rendu ✓ Cache
  • 36. Die CSS ! CSS inline + chargement non bloquant : ✓ Bon premier rendu ✓ Cache ✓ Pas de dépendance JS (noscript)
  • 37. Die CSS ! CSS inline + chargement non bloquant : Layout inline, ● Externe : le reste ● Utilisation de <noscript>
  • 38. Die JS ! Le JS ? ● Requête bloquante ● Mais indispensable ● 60Ko (gzipé)
  • 39. Die JS ! JS concaténé, minifié, gzipé ...
  • 40. Die JS ! JavaScript defer, chargement asynchrone
  • 41. Die JS ! JavaScript defer, chargement asynchrone ⚠ Correction des dépendances inlines
  • 42. Die JS ! JS : paralléliser ✓ Gain : 70ms :) ⚠ Dépendances
  • 43. Die HTTP ! La foire au lazy-loading
  • 44. Die HTTP ! Lazy-load des images produits : Moins de poids + Moins de requêtes + Super scores = Meilleur classement
  • 45. Die HTTP ! Lazy-load des images produits : Moins de poids + Moins de requêtes + Super scores ≠ Expérience utilisateur !
  • 46. Die HTTP ! Lazy-load des images produits : ✗ onmousemove
  • 47. Die HTTP ! Lazy-load des images produits : ✗ onmousemove ✗ Dépendance à JS
  • 48. Die HTTP ! Lazy-load des images produits : ✗ onmousemove ✗ Dépendance à JS ✓ La solution : JS + noscript
  • 49. Die HTTP ! ● Lazy-load de l'iframe du footer ● Lazy-load du JS de l'autocomplete
  • 50. Die HTTP ! Encodage des images ● Encodage en base64 ● data:uri / MHTML ● Dans CSS ou dans le HTML
  • 51. Die HTTP ! Encodage des images ✓ 0 requêtes ⚠ +30% de poids ⚠ Dans le HTML : pas de cache ⚠ CSS spécifiques IE
  • 52. Die HTTP ! Encodage des images ⚠ La surprise : le coût CPU
  • 53. Die HTTP ! 1 query to rule them all Bien tenté ;)
  • 54. Dernière technique ultime Savoir coder
  • 55. Savoir coder Page de départ : ● 213Ko ● 2000 noeuds DOM ● Validateur : 2300 parse error « Sensation » de lenteur
  • 56. Savoir coder Refactoring complet du HTML : ● Poids -50% ● nœuds DOM -50% ● Correction des erreurs ● Plus d'imbrication de tableaux = « Sensation » de fluidité
  • 57. Savoir coder Refactoring 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
  • 58. 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 ?