SlideShare une entreprise Scribd logo
1  sur  84
Télécharger pour lire hors ligne
Techniques d’accélération des pages Web




                           Jean-Pierre VINCENT
                          Consultant indépendant
                             #WebPerf - @theystolemynick
                                        Braincracking.org
Bonjour, je m’appelle Jean-Pierre

                    ●   5 10 13 ans de Web
                    ●   PHP, JavaScript, HTML5, CSS
                    ●   Ex :
                        –   startups, Yahoo!, houra.fr
                    ●   Expert frontend indépendant
                    ●   Veilleur :
                        –   braincracking.org
                        –   @theystolemynick
Performance Web ?




             Les 10 14 35 commandements

             http://developer.yahoo.com/performance/rules.html
Comment faire le tri ?


●   Yahoo! Best Practices (35      ● Nouveaux navigateurs
                                   ● Nouveaux besoins
    règles)
                                   ● Mobile
●   Google PageSpeed (31 règles)
●   Test Opquast (41 règles)


●   En vrai : 500+ pratiques
Pourquoi la performance ?

                                              ●   SEO
                                                  –   1 critère de référencement
                                                      chez Google


                                                  –   Métrique : temps « onload »


                                                  –   Mesurée par les utilisateurs




http://googlewebmastercentral.blogspot.fr/2010/04/using-site-speed-in-web-search-ranking.html
Pourquoi la performance ?




                   ●   Un administrateur système
                       heureux
Pourquoi la performance ?


                 ●   Qualité perçue




  $$
                 ●   Ergonomie
                 ●   Réponse à un besoin


                 ●   Métrique : premier rendu
Combien coûte une seconde ?
Combien coûte une seconde ?




Tunnel d’achat :


 1s = -7% de
 conversion
Combien coûte une seconde ?



   Vidéo :


1s =-6% de vue


          Akamai 2012
Combien coûte une seconde ?




                              Voyage


                         4s = -60% de vue
Combien coûte une seconde ?


         Search


●   Bing : 1 s =
    - 3 % de CA
●   Yahoo! : 1 s   =
    + 10 % de rebond
Combien coûte une seconde ?


                                     Mobile


     ●    1 s = -10% de pages vues


     ●    Après 4 s : 60% d'abandon


http://www.themediabriefing.com/article/2012-10-02/speed-is-a-feature-why-a-slow-mobile-web-experience-means-lost-revenue
http://www.strangeloopnetworks.com/resources/infographics/2012-state-of-mobile-ecommerce-performance/poster
     /
Chantier Webperf




 Comment ne pas rater un chantier Webperf ?
Chantier Webperf


●   Objectifs


●   Que voient les utilisateurs ?


●   Quelles techniques ?


●   Quel suivi ?
Objectifs

Interactivité avec la fonctionnalité   <5s
Objectifs

Interactivité avec la fonctionnalité   <5s
Premier rendu                          <2s
Objectifs

Interactivité avec la fonctionnalité   <5s
Premier rendu                          <2s
Réponse HTML                           <1s
Objectifs

Interactivité avec la fonctionnalité   <5s
Premier rendu                          <2s
Réponse HTML                           <1s
Chargement de la page                  < 20 s ?
Les utilisateurs


     ●   Grand public français :
         ● IE 7 is dead !
         ● Arrivée via réseaux mobiles

         ● Connexions moyennes :




                       ADSL        Mobiles
             Débit     4, 8 Mb/s   2,5 Mb/s
             Latence   95 ms       200 ms
Les utilisateurs

                             Répartition des débits (ligne fixe)


• La moyenne n’est pas
représentative               5-10 Mb/s
                                         > 10 Mb/s < 1 Mb/s

                                                          1 - 2 Mb/s
●   25% des utilisateurs
    ont moins de 2,5 Mb/s
                            4 - 5 Mb/s                   2 - 3 Mb/s
                                            3 - 4 Mb/s
Les utilisateurs


Connexion réseau à cibler :
                         ADSL       Mobiles
           Débit         2,5 Mb/s   2,5 Mb/s
           Latence       110 ms     200 ms
                                    +25% de perte


Navigateurs à cibler :
IE 8
Safari iOS
Android 2.3.x et 4.x
Les techniques


           Par où commencer ?

        Yahoo! Best Practices (35 règles)
        Google PageSpeed (31 règles)
        Test Opquast (41 règles)

        En vrai : 500+ pratiques
Configuration serveur



    1. Configuration du keep-alive :
        KeepAlive On
        KeepAliveTimeout 5
        Timeout       10

    2. Activer la compression
Gérer son cache




            →
Gérer son cache



                  Efficace mais :
                  50% des sites oublient
                  30% ont un TTL < 30
                  jours
Gérer son cache


« Vide ton cache »

                     Sans cache :
                      • Phases de recette interne
                      • Environnements de
                     développement

                     Cache agressif :
                      • Cache utilisateur
                      • Chaîne de cache réseau
Gérer son cache

Cache : invalidation standard
●   Serveur
    eTag: "xxxxxx"
       Ou
    Last-Modified: DATE_W3C
                      • Client
                         If-None-Match: "xxxxxx"
                            Ou
                         If-Modified-Since: DATE_W3C
• Serveur
  200 OK
     Ou
  304 Not Modified
Gérer son cache

Cache : invalidation standard

Sert à des cas spéciaux
   • Polling
   • Revalidation de session
   • Environnement de dév.
Gérer son cache

Invalidation des caches longs
 ●   Maîtrise totale des URL     Mise en cache long :
     ● HTML

     ● CSS
                                 Expires : +1 an
     ● JS
                                 Cache-control : 
 ●   Processus de compilation    public
 ●   URL rendues uniques par :   Vary : xxx
     ● Numéro de release

     ● Md5 du fichier
Gérer son cache

Le super cache

API Application Cache

●   1 application = 1 pack de
    fichiers
●   1 fichier de règles
●   1 API de gestion du
    cache

●   Surtout sur mobiles
Le chemin critique

Trouver le chemin critique


                             Chemin critique




                                      1er rendu
Le chemin critique

Côté client

Ressources bloquantes :   Ressources gênantes :
● Redirections             ● Images
● Génération de la page    ● Iframe

● CSS                      ● Objets flash / vidéo

● Polices

● JS
Le chemin critique

Redirections


           ● Limiter à 1 max
           ● Jamais côté client

           ● Surtout sur mobile
Le chemin critique




 ●   Moyens :
     ● Cache serveur

     ● Flush()

     ● Page dynamiques et XHR

     ● Parallélisation (Big Pipe de FB)
Pages statiques


Cache serveur
 ● Fichiers plats

 ● Mécanismes des CMS

 ● memcache

 ● Varnish

 ● CDN…




Paramétrage du temps de cache
Contenu personnalisé
Technique du Flush()




●   Envoyer le <head> au plus tôt
Pages semi-dynamiques




  ●   Cache sur les parties statiques
  ●   Envoyer ASAP
  ●   XHR ou SSI pour les parties dynamiques
  ●   Ne pas oublier l'interface

       Référencement
Le chemin critique

Inclusion des parties dynamiques



●   Personnalisation :
    Server Side Include
Pages semi-dynamiques
Extrêmes

Facebook Big Pipe
Le chemin critique

Déblayer le chemin critique
 ●   CSS

     ● Concaténation
     ● Minification

     ● Inline ?
Le chemin critique

    Polices


● Les supprimer …
● Les valider :

  ● poids,

  ● utilisée

  ● compatibilité



●   Chargement asynchrone
SPOF



Dépendances à des serveurs tiers qui peuvent
bloquer le rendu

Usual suspect :
●http://platform.twitter.com/widgets.js

●https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/j

 query.min.js
●http://html5shiv.googlecode.com/svn/trunk/html5.js
SPOF-O-Matic




     Teste la fragilité aux ralentissements
                des serveurs tiers
                       démo
Pause ?
Inclure JavaScript

Le choix des armes

  ● <script src> en haut
  ● <script src> en bas

  ● Inline

  ● defer

  ● Asynchrone
Inclure JavaScript

<script src> en haut


  ●   Si :
      ● petit

      ● concaténé

      ● sans concurrence
Inclure JavaScript

<script src> en bas


  ●   Si :
      ● Page rapide

      ● Gestion des dépendances

      ● Pas de document.write()

      ● Pas de iOS
Inclure JavaScript

<script defer>

     ●   Retardé par le onload
Inclure JavaScript

Javascript asynchrone
   Conditions :
 ● Chargeur mis inline

 ● Gestion d'une file de téléchargement

 ● Remplacer les dépendances inline par des

   callback
 ● Découpe par module

 ● Téléchargement dépriorisé



 ●   Au top: concaténation + module + asynchrone
Outils : analyse



               ySlow
Outils : analyse


     Google PageSpeed
Outils : analyse


               WebPageTest
Outils : analyse


WebPageTest, PageSpeed, ySwow...




            Ne pas se focaliser sur les notes
Profilers front


             IE Developer tools
Profilers front


              Dynatrace AJAX
RUM




✓ Collecte des temps de chargement des utilisateurs

✓ Complément des tests synthétiques

  Peut ralentir la page
RUM



Gratuit                Commercial

●   Boomerang JS
                       ● LogNormal
                       ● Torbit
●   Google Analytics
                       ● Yottaa

                       ● New Relic

                       ● Cedexis

                        …
RUM


      Google Analytics
RUM


      Google Analytics
RUM


           Google Analytics


      Données de navigateurs
      modernes
Monitoring



Gratuit           Commercial

●   WPT monitor
                  ● Torbit
                  ● Yottaa
●   ShowSlow
                  ● GTmetrix

                  ● Dynatrace

                   …
Résumé


   ●   Analyse fine et méta-outils :
       ●   WebPageTest

   ●    Monitoring :
       ● WPT Monitor



   ●    RUM :
       ● Boomerang, Google Analytics



   ●    Code Front :
       ● IE8 F12, Chrome
Les images
Images




    Optimisations :

●   Ne pas les charger !
●   Charger à la demande
●   Compression manuelle
●   Compression automatique
Ne pas charger



     Méthode de lazy-load :
 ●
     charger les images visibles


      mobiles
             https://github.com/fasterize/lazyload
Remplacer les icônes



    Caractères unicode

             ►★✓⇢✎♥☎♻⚠☻☺⇨

●Taille et couleur adaptable
⚠ servir en UTF-8
⚠ dépend du couple OS / navigateur

    http://ikwebdesigner.com/special-characters/
Remplacer les dégradés



background: linear-gradient(top 
bottom, #ffffff 0%,#131313 100%);

●   Taille automatique
     IE : dégradés simples
●   Syntaxe lourde

      http://www.colorzilla.com/gradient-editor/
Remplacer la décoration



●   Coins arrondis
●   Ombres sur texte et boîtes
●   Rotation de texte
●   Opacité


⚠ Attention aux perfs de rendu
Limiter les requêtes




●   Encodage en base64
    <img src="data:image/png;base64,<?=
    base64_encode( file_get_contents( './image.p
    ng' )); ?>">

●IE < 8 : MHTML
⚠ Performance de rendu
Sprites




Maintenance
Outil : Sass + Compass
Compression manuelle




 Connaître les formats
● PNG toujours meilleur que GIF

● PNG : ultra efficace avec des aplats de couleur

● JPG : mauvais pour le texte si il est en couleurs

● Jamais de PNG entrelacé

● PNG8 alpha

● WebP : mal supporté
Outils de compression



●   PNGOUT                   ●   pngquant
●   OptiPNG                  ●   pngnq-s9
●   Pngcrush                 ●   Gifsicle
●   JpegOptim                ●   jpegtran
●   jpegrescan
●    SVG : distribuer en
    gzip
Interface



●   PNGGauntlet
Interface



●   ImageAlpha (pngmini.com)
Interface



●   ImageOptim
Interface



●   smushit.com
Rendu fluide

Alléger le DOM

      Surveiller 2 métriques
      ● La profondeur max et moyenne ( < 12 )

      ● Le nombre de nœuds (< 1500 )




      Outil : DOM Monster, WPT

  ● Long et périlleux si fait après coup
  ● Sensibilisation des intégrateurs
Rendu fluide - JavaScript


  ● Bonnes pratiques
  ● Peu de requêtes DOM

    ● Caching

    ● En dehors des boucles

  ● Manipulation du DOM par batch

  ● Application de classes VS $.css()

  ● Limiter la taille des requêtes

    ● $(doc.ById('monID')).find('>

      div.maClasse');
  ● Privilégier document.querySelector()




  ●   JavaScript lui même est rarement un problème
Rendu fluide

La technique du setTimeout( 0 )

   En cas de blocage de l'interface :
    ● « casser » les boucles toutes les 50 ms

    ● Y revenir lorsque le navigateur est libre
Rendu fluide - Web Worker


    Pour du calcul lourd
  ● Crée un nouveau thread

  ● Communication par événements




  var worker = new Worker('my_task.js');
  worker.onmessage = function(event) {
     console.log("Called !n");
  };


    ● Compatibilité navigateurs
    ● Organisation du code spécifique
S’auto-forme
    r
    En anglais                            En français


                                   ●   http
●   http://www.perfplanet.com/
                                       ://checklists.opquast.com/webper
●   http
                                       f/
    ://developer.yahoo.com/perfo   ●   https://groups.google.com/foru
    rmance/rules.html                  m/?fromgroups#!forum/performan
●   https://
                                       ce-web
    developers.google.com/speed/   ●   @webperf_fr
    docs/best-practices/rules_in       et
    tro                            ●   @WebperfParis
●   http://                        ●   https://
    www.webpagetest.org/forum
                                       github.com/edas/webperf-book
    s                              ●   http://braincracking.org
Crédits



●   http://www.flickr.com/photos/themonnie/2495892146
●   http://www.flickr.com/photos/76657755@N04/7214596024/in/photostream
●   http://www.flickr.com/photos/johannes_wl/8364284798/sizes/l/in/photostre
    m/

Contenu connexe

Tendances

"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
 
Performance Web côté client - Daspet / Sullivan - Paris Web 2008
Performance Web côté client - Daspet / Sullivan - Paris Web 2008Performance Web côté client - Daspet / Sullivan - Paris Web 2008
Performance Web côté client - Daspet / Sullivan - Paris Web 2008Association Paris-Web
 
Pourquoi la performance?
Pourquoi la performance?Pourquoi la performance?
Pourquoi la performance?Nicole Sullivan
 
HTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open SourceIppon
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
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
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ? haricot
 

Tendances (8)

"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
 
Performance Web côté client - Daspet / Sullivan - Paris Web 2008
Performance Web côté client - Daspet / Sullivan - Paris Web 2008Performance Web côté client - Daspet / Sullivan - Paris Web 2008
Performance Web côté client - Daspet / Sullivan - Paris Web 2008
 
Pourquoi la performance?
Pourquoi la performance?Pourquoi la performance?
Pourquoi la performance?
 
HTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilité
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open Source
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
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
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ?
 

En vedette

Get Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsGet Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsDavey Shafik
 
Automation using-phing
Automation using-phingAutomation using-phing
Automation using-phingRajat Pandit
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP GeneratorsMark Baker
 
The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)Matthias Noback
 
Top tips my_sql_performance
Top tips my_sql_performanceTop tips my_sql_performance
Top tips my_sql_performanceafup Paris
 
Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Marcello Duarte
 
Why elasticsearch rocks!
Why elasticsearch rocks!Why elasticsearch rocks!
Why elasticsearch rocks!tlrx
 
Writing infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLWriting infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLGabriele Bartolini
 
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Bruno Boucard
 
L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)Arnauld Loyer
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apacheafup Paris
 
TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016CiaranMcNulty
 
The Wonderful World of Symfony Components
The Wonderful World of Symfony ComponentsThe Wonderful World of Symfony Components
The Wonderful World of Symfony ComponentsRyan Weaver
 
PHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersPHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersKacper Gunia
 

En vedette (20)

Diving deep into twig
Diving deep into twigDiving deep into twig
Diving deep into twig
 
Get Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsGet Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP Streams
 
Elastic Searching With PHP
Elastic Searching With PHPElastic Searching With PHP
Elastic Searching With PHP
 
PHP5.5 is Here
PHP5.5 is HerePHP5.5 is Here
PHP5.5 is Here
 
Automation using-phing
Automation using-phingAutomation using-phing
Automation using-phing
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP Generators
 
The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)
 
Mocking Demystified
Mocking DemystifiedMocking Demystified
Mocking Demystified
 
Top tips my_sql_performance
Top tips my_sql_performanceTop tips my_sql_performance
Top tips my_sql_performance
 
Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015
 
Why elasticsearch rocks!
Why elasticsearch rocks!Why elasticsearch rocks!
Why elasticsearch rocks!
 
Writing infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLWriting infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQL
 
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
 
L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apache
 
TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016
 
Behat 3.0 meetup (March)
Behat 3.0 meetup (March)Behat 3.0 meetup (March)
Behat 3.0 meetup (March)
 
Caching on the Edge
Caching on the EdgeCaching on the Edge
Caching on the Edge
 
The Wonderful World of Symfony Components
The Wonderful World of Symfony ComponentsThe Wonderful World of Symfony Components
The Wonderful World of Symfony Components
 
PHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersPHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4Developers
 

Similaire à Techniques d'accélération des pages 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 exempleJean-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
 
La vitesse d’un site web : un levier de croissance peu exploité
La vitesse d’un site web : un levier de croissance peu exploitéLa vitesse d’un site web : un levier de croissance peu exploité
La vitesse d’un site web : un levier de croissance peu exploitéFasterize
 
Web perf Silicon Comte
Web perf Silicon ComteWeb perf Silicon Comte
Web perf Silicon ComteSilicon Comté
 
Analyse de logs SEO : pour qui, pour quoi, comment ?
Analyse de logs SEO : pour qui, pour quoi, comment ?Analyse de logs SEO : pour qui, pour quoi, comment ?
Analyse de logs SEO : pour qui, pour quoi, comment ?Julien Deneuville
 
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
 
Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Jean-Pierre Vincent
 
Webperf et SEO : les Mythes et la Réalité
Webperf et SEO : les Mythes et la RéalitéWebperf et SEO : les Mythes et la Réalité
Webperf et SEO : les Mythes et la RéalitéFasterize
 
Webperf & SEO : les mythes et la réalité
Webperf & SEO : les mythes et la réalitéWebperf & SEO : les mythes et la réalité
Webperf & SEO : les mythes et la réalitéFasterize
 
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...Peak Ace
 
Panel de solutions javascript
Panel de solutions javascriptPanel de solutions javascript
Panel de solutions javascriptjp_mouton
 
"Performance Web : vers la Speed Update, un pas après l’autre", Boris Schapir...
"Performance Web : vers la Speed Update, un pas après l’autre", Boris Schapir..."Performance Web : vers la Speed Update, un pas après l’autre", Boris Schapir...
"Performance Web : vers la Speed Update, un pas après l’autre", Boris Schapir...Boris SCHAPIRA
 
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
 
Core Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEO
Core Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEOCore Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEO
Core Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEOWeLoveSEO
 
RennesJS Talk webperf by Dareboost
RennesJS Talk webperf by DareboostRennesJS Talk webperf by Dareboost
RennesJS Talk webperf by DareboostDamien Jubeau
 
Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesOxalide
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceLudovic Piot
 

Similaire à Techniques d'accélération des pages web (20)

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
 
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
 
Les performances Web mobile
Les performances Web mobileLes performances Web mobile
Les performances Web mobile
 
La vitesse d’un site web : un levier de croissance peu exploité
La vitesse d’un site web : un levier de croissance peu exploitéLa vitesse d’un site web : un levier de croissance peu exploité
La vitesse d’un site web : un levier de croissance peu exploité
 
Web perf Silicon Comte
Web perf Silicon ComteWeb perf Silicon Comte
Web perf Silicon Comte
 
Html5 now light
Html5 now lightHtml5 now light
Html5 now light
 
Analyse de logs SEO : pour qui, pour quoi, comment ?
Analyse de logs SEO : pour qui, pour quoi, comment ?Analyse de logs SEO : pour qui, pour quoi, comment ?
Analyse de logs SEO : pour qui, pour quoi, comment ?
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance front
 
Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010
 
Webperf et SEO : les Mythes et la Réalité
Webperf et SEO : les Mythes et la RéalitéWebperf et SEO : les Mythes et la Réalité
Webperf et SEO : les Mythes et la Réalité
 
Webperf & SEO : les mythes et la réalité
Webperf & SEO : les mythes et la réalitéWebperf & SEO : les mythes et la réalité
Webperf & SEO : les mythes et la réalité
 
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
 
Panel de solutions javascript
Panel de solutions javascriptPanel de solutions javascript
Panel de solutions javascript
 
"Performance Web : vers la Speed Update, un pas après l’autre", Boris Schapir...
"Performance Web : vers la Speed Update, un pas après l’autre", Boris Schapir..."Performance Web : vers la Speed Update, un pas après l’autre", Boris Schapir...
"Performance Web : vers la Speed Update, un pas après l’autre", Boris Schapir...
 
Optimisation de son site web
Optimisation de son site webOptimisation de son site web
Optimisation de son site 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
 
Core Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEO
Core Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEOCore Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEO
Core Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEO
 
RennesJS Talk webperf by Dareboost
RennesJS Talk webperf by DareboostRennesJS Talk webperf by Dareboost
RennesJS Talk webperf by Dareboost
 
Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slides
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performance
 

Plus 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
 
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 3 : multimedia
HTML5 maintenant partie 3 : multimediaHTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaJean-Pierre Vincent
 
HTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsHTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsJean-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
 

Plus de Jean-Pierre Vincent (10)

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
 
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 3 : multimedia
HTML5 maintenant partie 3 : multimediaHTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimedia
 
HTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsHTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIs
 
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
 

Techniques d'accélération des pages web

  • 1. Techniques d’accélération des pages Web Jean-Pierre VINCENT Consultant indépendant #WebPerf - @theystolemynick Braincracking.org
  • 2. Bonjour, je m’appelle Jean-Pierre ● 5 10 13 ans de Web ● PHP, JavaScript, HTML5, CSS ● Ex : – startups, Yahoo!, houra.fr ● Expert frontend indépendant ● Veilleur : – braincracking.org – @theystolemynick
  • 3. Performance Web ? Les 10 14 35 commandements http://developer.yahoo.com/performance/rules.html
  • 4. Comment faire le tri ? ● Yahoo! Best Practices (35 ● Nouveaux navigateurs ● Nouveaux besoins règles) ● Mobile ● Google PageSpeed (31 règles) ● Test Opquast (41 règles) ● En vrai : 500+ pratiques
  • 5. Pourquoi la performance ? ● SEO – 1 critère de référencement chez Google – Métrique : temps « onload » – Mesurée par les utilisateurs http://googlewebmastercentral.blogspot.fr/2010/04/using-site-speed-in-web-search-ranking.html
  • 6. Pourquoi la performance ? ● Un administrateur système heureux
  • 7. Pourquoi la performance ? ● Qualité perçue $$ ● Ergonomie ● Réponse à un besoin ● Métrique : premier rendu
  • 8. Combien coûte une seconde ?
  • 9. Combien coûte une seconde ? Tunnel d’achat : 1s = -7% de conversion
  • 10. Combien coûte une seconde ? Vidéo : 1s =-6% de vue Akamai 2012
  • 11. Combien coûte une seconde ? Voyage 4s = -60% de vue
  • 12. Combien coûte une seconde ? Search ● Bing : 1 s = - 3 % de CA ● Yahoo! : 1 s = + 10 % de rebond
  • 13. Combien coûte une seconde ? Mobile ● 1 s = -10% de pages vues ● Après 4 s : 60% d'abandon http://www.themediabriefing.com/article/2012-10-02/speed-is-a-feature-why-a-slow-mobile-web-experience-means-lost-revenue http://www.strangeloopnetworks.com/resources/infographics/2012-state-of-mobile-ecommerce-performance/poster /
  • 14. Chantier Webperf Comment ne pas rater un chantier Webperf ?
  • 15. Chantier Webperf ● Objectifs ● Que voient les utilisateurs ? ● Quelles techniques ? ● Quel suivi ?
  • 16. Objectifs Interactivité avec la fonctionnalité <5s
  • 17. Objectifs Interactivité avec la fonctionnalité <5s Premier rendu <2s
  • 18. Objectifs Interactivité avec la fonctionnalité <5s Premier rendu <2s Réponse HTML <1s
  • 19. Objectifs Interactivité avec la fonctionnalité <5s Premier rendu <2s Réponse HTML <1s Chargement de la page < 20 s ?
  • 20. Les utilisateurs ● Grand public français : ● IE 7 is dead ! ● Arrivée via réseaux mobiles ● Connexions moyennes : ADSL Mobiles Débit 4, 8 Mb/s 2,5 Mb/s Latence 95 ms 200 ms
  • 21. Les utilisateurs Répartition des débits (ligne fixe) • La moyenne n’est pas représentative 5-10 Mb/s > 10 Mb/s < 1 Mb/s 1 - 2 Mb/s ● 25% des utilisateurs ont moins de 2,5 Mb/s 4 - 5 Mb/s 2 - 3 Mb/s 3 - 4 Mb/s
  • 22. Les utilisateurs Connexion réseau à cibler : ADSL Mobiles Débit 2,5 Mb/s 2,5 Mb/s Latence 110 ms 200 ms +25% de perte Navigateurs à cibler : IE 8 Safari iOS Android 2.3.x et 4.x
  • 23. Les techniques Par où commencer ? Yahoo! Best Practices (35 règles) Google PageSpeed (31 règles) Test Opquast (41 règles) En vrai : 500+ pratiques
  • 24. Configuration serveur 1. Configuration du keep-alive : KeepAlive On KeepAliveTimeout 5 Timeout 10 2. Activer la compression
  • 26. Gérer son cache Efficace mais : 50% des sites oublient 30% ont un TTL < 30 jours
  • 27. Gérer son cache « Vide ton cache » Sans cache : • Phases de recette interne • Environnements de développement Cache agressif : • Cache utilisateur • Chaîne de cache réseau
  • 28. Gérer son cache Cache : invalidation standard ● Serveur eTag: "xxxxxx" Ou Last-Modified: DATE_W3C • Client If-None-Match: "xxxxxx" Ou If-Modified-Since: DATE_W3C • Serveur 200 OK Ou 304 Not Modified
  • 29. Gérer son cache Cache : invalidation standard Sert à des cas spéciaux • Polling • Revalidation de session • Environnement de dév.
  • 30. Gérer son cache Invalidation des caches longs ● Maîtrise totale des URL Mise en cache long : ● HTML ● CSS Expires : +1 an ● JS Cache-control :  ● Processus de compilation public ● URL rendues uniques par : Vary : xxx ● Numéro de release ● Md5 du fichier
  • 31. Gérer son cache Le super cache API Application Cache ● 1 application = 1 pack de fichiers ● 1 fichier de règles ● 1 API de gestion du cache ● Surtout sur mobiles
  • 32. Le chemin critique Trouver le chemin critique Chemin critique 1er rendu
  • 33. Le chemin critique Côté client Ressources bloquantes : Ressources gênantes : ● Redirections ● Images ● Génération de la page ● Iframe ● CSS ● Objets flash / vidéo ● Polices ● JS
  • 34. Le chemin critique Redirections ● Limiter à 1 max ● Jamais côté client ● Surtout sur mobile
  • 35. Le chemin critique ● Moyens : ● Cache serveur ● Flush() ● Page dynamiques et XHR ● Parallélisation (Big Pipe de FB)
  • 36. Pages statiques Cache serveur ● Fichiers plats ● Mécanismes des CMS ● memcache ● Varnish ● CDN… Paramétrage du temps de cache Contenu personnalisé
  • 37. Technique du Flush() ● Envoyer le <head> au plus tôt
  • 38. Pages semi-dynamiques ● Cache sur les parties statiques ● Envoyer ASAP ● XHR ou SSI pour les parties dynamiques ● Ne pas oublier l'interface Référencement
  • 39. Le chemin critique Inclusion des parties dynamiques ● Personnalisation : Server Side Include
  • 42. Le chemin critique Déblayer le chemin critique ● CSS ● Concaténation ● Minification ● Inline ?
  • 43. Le chemin critique Polices ● Les supprimer … ● Les valider : ● poids, ● utilisée ● compatibilité ● Chargement asynchrone
  • 44. SPOF Dépendances à des serveurs tiers qui peuvent bloquer le rendu Usual suspect : ●http://platform.twitter.com/widgets.js ●https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/j query.min.js ●http://html5shiv.googlecode.com/svn/trunk/html5.js
  • 45. SPOF-O-Matic Teste la fragilité aux ralentissements des serveurs tiers démo
  • 47. Inclure JavaScript Le choix des armes ● <script src> en haut ● <script src> en bas ● Inline ● defer ● Asynchrone
  • 48. Inclure JavaScript <script src> en haut ● Si : ● petit ● concaténé ● sans concurrence
  • 49. Inclure JavaScript <script src> en bas ● Si : ● Page rapide ● Gestion des dépendances ● Pas de document.write() ● Pas de iOS
  • 50. Inclure JavaScript <script defer> ● Retardé par le onload
  • 51. Inclure JavaScript Javascript asynchrone Conditions : ● Chargeur mis inline ● Gestion d'une file de téléchargement ● Remplacer les dépendances inline par des callback ● Découpe par module ● Téléchargement dépriorisé ● Au top: concaténation + module + asynchrone
  • 53. Outils : analyse Google PageSpeed
  • 54. Outils : analyse WebPageTest
  • 55. Outils : analyse WebPageTest, PageSpeed, ySwow... Ne pas se focaliser sur les notes
  • 56. Profilers front IE Developer tools
  • 57. Profilers front Dynatrace AJAX
  • 58. RUM ✓ Collecte des temps de chargement des utilisateurs ✓ Complément des tests synthétiques Peut ralentir la page
  • 59. RUM Gratuit Commercial ● Boomerang JS ● LogNormal ● Torbit ● Google Analytics ● Yottaa ● New Relic ● Cedexis …
  • 60. RUM Google Analytics
  • 61. RUM Google Analytics
  • 62. RUM Google Analytics Données de navigateurs modernes
  • 63. Monitoring Gratuit Commercial ● WPT monitor ● Torbit ● Yottaa ● ShowSlow ● GTmetrix ● Dynatrace …
  • 64. Résumé ● Analyse fine et méta-outils : ● WebPageTest ● Monitoring : ● WPT Monitor ● RUM : ● Boomerang, Google Analytics ● Code Front : ● IE8 F12, Chrome
  • 66. Images Optimisations : ● Ne pas les charger ! ● Charger à la demande ● Compression manuelle ● Compression automatique
  • 67. Ne pas charger Méthode de lazy-load : ● charger les images visibles mobiles https://github.com/fasterize/lazyload
  • 68. Remplacer les icônes Caractères unicode ►★✓⇢✎♥☎♻⚠☻☺⇨ ●Taille et couleur adaptable ⚠ servir en UTF-8 ⚠ dépend du couple OS / navigateur http://ikwebdesigner.com/special-characters/
  • 69. Remplacer les dégradés background: linear-gradient(top  bottom, #ffffff 0%,#131313 100%); ● Taille automatique IE : dégradés simples ● Syntaxe lourde http://www.colorzilla.com/gradient-editor/
  • 70. Remplacer la décoration ● Coins arrondis ● Ombres sur texte et boîtes ● Rotation de texte ● Opacité ⚠ Attention aux perfs de rendu
  • 71. Limiter les requêtes ● Encodage en base64 <img src="data:image/png;base64,<?= base64_encode( file_get_contents( './image.p ng' )); ?>"> ●IE < 8 : MHTML ⚠ Performance de rendu
  • 73. Compression manuelle Connaître les formats ● PNG toujours meilleur que GIF ● PNG : ultra efficace avec des aplats de couleur ● JPG : mauvais pour le texte si il est en couleurs ● Jamais de PNG entrelacé ● PNG8 alpha ● WebP : mal supporté
  • 74. Outils de compression ● PNGOUT ● pngquant ● OptiPNG ● pngnq-s9 ● Pngcrush ● Gifsicle ● JpegOptim ● jpegtran ● jpegrescan ● SVG : distribuer en gzip
  • 75. Interface ● PNGGauntlet
  • 76. Interface ● ImageAlpha (pngmini.com)
  • 77. Interface ● ImageOptim
  • 78. Interface ● smushit.com
  • 79. Rendu fluide Alléger le DOM Surveiller 2 métriques ● La profondeur max et moyenne ( < 12 ) ● Le nombre de nœuds (< 1500 ) Outil : DOM Monster, WPT ● Long et périlleux si fait après coup ● Sensibilisation des intégrateurs
  • 80. Rendu fluide - JavaScript ● Bonnes pratiques ● Peu de requêtes DOM ● Caching ● En dehors des boucles ● Manipulation du DOM par batch ● Application de classes VS $.css() ● Limiter la taille des requêtes ● $(doc.ById('monID')).find('> div.maClasse'); ● Privilégier document.querySelector() ● JavaScript lui même est rarement un problème
  • 81. Rendu fluide La technique du setTimeout( 0 ) En cas de blocage de l'interface : ● « casser » les boucles toutes les 50 ms ● Y revenir lorsque le navigateur est libre
  • 82. Rendu fluide - Web Worker Pour du calcul lourd ● Crée un nouveau thread ● Communication par événements var worker = new Worker('my_task.js'); worker.onmessage = function(event) { console.log("Called !n"); }; ● Compatibilité navigateurs ● Organisation du code spécifique
  • 83. S’auto-forme r En anglais En français ● http ● http://www.perfplanet.com/ ://checklists.opquast.com/webper ● http f/ ://developer.yahoo.com/perfo ● https://groups.google.com/foru rmance/rules.html m/?fromgroups#!forum/performan ● https:// ce-web developers.google.com/speed/ ● @webperf_fr docs/best-practices/rules_in et tro ● @WebperfParis ● http:// ● https:// www.webpagetest.org/forum github.com/edas/webperf-book s ● http://braincracking.org
  • 84. Crédits ● http://www.flickr.com/photos/themonnie/2495892146 ● http://www.flickr.com/photos/76657755@N04/7214596024/in/photostream ● http://www.flickr.com/photos/johannes_wl/8364284798/sizes/l/in/photostre m/