Techniques accélération des pages web #kiwiparty

78
Techniques d’accélération des pages Web Jean-Pierre VINCENT Consultant indépendant @theystolemynick Braincracking.org

Transcript of Techniques accélération des pages web #kiwiparty

Page 1: Techniques accélération des pages web #kiwiparty

Techniques d’accélération des pages Web

Jean-Pierre VINCENTConsultant indépendant

@theystolemynickBraincracking.org

Page 2: Techniques accélération des pages web #kiwiparty

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

Page 3: Techniques accélération des pages web #kiwiparty

Performance Web ?

Les 10 14 commandementsen 2006

http://developer.yahoo.com/performance/rules.html

Page 4: Techniques accélération des pages web #kiwiparty

Soooo 2006

Page 5: Techniques accélération des pages web #kiwiparty

2006 - 2013

Nouveaux besoins Pages 1 Mo + Social, tracking, pubs JavaScript partout Mobile !

Meilleur environnement SPDY remplace HTTP IE 7 meurt ADSL pour tous 4G, Fibre !

Page 6: Techniques accélération des pages web #kiwiparty

Passer des règles aux outils

Règles Yahoo! Best Practices

(35 règles) Google PageSpeed (31 règles) Test Opquast (41 règles)… Jusqu'à 400+ pratiques

Outils Analyse réseau

Profiling

Bonnes pratiques Monitoring RUM Intégration continue

Page 7: Techniques accélération des pages web #kiwiparty

Combien coûte une seconde ?

Page 8: Techniques accélération des pages web #kiwiparty

Combien coûte une seconde ?

Tunnel d’achat :

1s = -7% de conversion

Tagman, 2012

Page 9: Techniques accélération des pages web #kiwiparty

Combien coûte une seconde ?

Vidéo :

1s = -6% de vue

Akamai 2012

Page 10: Techniques accélération des pages web #kiwiparty

Combien coûte une seconde ?

e-commerce

1 s = - 50 % de conversion

Walmart 2012

Page 11: Techniques accélération des pages web #kiwiparty

Combien coûte une seconde ?

Search

Bing : 1 s = - 3 % de CA Yahoo! : 1 s = + 10 % de rebond

Études Bing et Google Velocity 2009 : http://velocityconf.com/velocity2009/public/schedule/detail/8523

Page 12: Techniques accélération des pages web #kiwiparty

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-revenuehttp://www.strangeloopnetworks.com/resources/infographics/2012-state-of-mobile-ecommerce-performance/poster

Page 13: Techniques accélération des pages web #kiwiparty

Chantier Webperf

Comment ne pas rater un chantier Webperf ?

Page 14: Techniques accélération des pages web #kiwiparty

Chantier Webperf

Fixer des objectifs

Mesurer pour l'utilisateur

Coder !

Surveiller

Page 15: Techniques accélération des pages web #kiwiparty

Pourquoi la performance ?

Qualité perçue Ergonomie Réponse à un besoin

Métriques : Accès fonctionnalité premier rendu

$$

Page 16: Techniques accélération des pages web #kiwiparty

Objectifs

Interactivité avec la fonctionnalité < 5 s

Page 17: Techniques accélération des pages web #kiwiparty

Mesurer

En JavaScript Google Analytics « User Timing » Boomerang, autres outils de RUM

Page 18: Techniques accélération des pages web #kiwiparty

Interactivité avec la fonctionnalité < 5 s

Premier rendu < 2 s

Objectifs

Page 19: Techniques accélération des pages web #kiwiparty

Mesurer

WebPageTest Dynatrace Services payants

Page 20: Techniques accélération des pages web #kiwiparty

Trouver le chemin critique

Chemin critique

1er rendu

Le chemin critique

Page 21: Techniques accélération des pages web #kiwiparty

Agir

Agir sur le chemin critique

Page 22: Techniques accélération des pages web #kiwiparty

Côté client

Redirections CSS Polices JS

Ressources bloquantes :

Le chemin critique

Page 23: Techniques accélération des pages web #kiwiparty

Redirections

Limiter à 1 max Jamais côté client Surtout sur mobile

Le chemin critique

Page 24: Techniques accélération des pages web #kiwiparty

CSS

Concaténation (2 fichiers max)

Minification

Inline ?

Le chemin critique

Page 25: Techniques accélération des pages web #kiwiparty

Polices

Les supprimer … Les valider :

poids, utilisée, compatible (Chrome XP)

Chargement asynchrone

Le chemin critique

Page 26: Techniques accélération des pages web #kiwiparty

Le choix des armes

<script src> en haut <script src> en bas Inline defer Asynchrone

Inclure JavaScript

Page 27: Techniques accélération des pages web #kiwiparty

<script src> en bas

Si : Page légère Gestion des dépendances Pas de document.write() Pas de iOS

Inclure JavaScript

Page 28: Techniques accélération des pages web #kiwiparty

<script defer>

Retardé par le onload

Inclure JavaScript

Page 29: Techniques accélération des pages web #kiwiparty

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

LabJS, requireJS

Inclure JavaScript

Page 30: Techniques accélération des pages web #kiwiparty

<script src> en haut

Si : petit concaténé sans concurrence

Et HTML + CSS + JS + Fonts < 6 requêtes

Inclure JavaScript

Page 31: Techniques accélération des pages web #kiwiparty

Le choix se fera sur :

Contraintes de la page Maturité de l'équipe

Inclure JavaScript

Page 32: Techniques accélération des pages web #kiwiparty

Interactivité avec la fonctionnalité < 5 s

Premier rendu < 2 s

Réponse HTML < 1 s

Objectifs

Page 33: Techniques accélération des pages web #kiwiparty

Tous les outils du monde…

Et WebPageTest

Mesurer

Page 34: Techniques accélération des pages web #kiwiparty

Moyens : Cache serveur Flush() Page dynamiques et XHR Parallélisation (Big Pipe de FB)

Agir

Page 35: Techniques accélération des pages web #kiwiparty

Pages statiques

Cache serveur Fichiers plats Mécanismes des CMS memcache Varnish CDN…

Paramétrage du temps de cacheContenu personnalisé

Page 36: Techniques accélération des pages web #kiwiparty

Technique du Flush()

Envoyer le <head> au plus tôt

Page 37: Techniques accélération des pages web #kiwiparty

Personnalisation : Server Side Include

Inclusion des parties dynamiques

Pages semi-dynamiques

Page 38: Techniques accélération des pages web #kiwiparty

Pages semi-dynamiques

Page 39: Techniques accélération des pages web #kiwiparty

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

Page 40: Techniques accélération des pages web #kiwiparty

Extrêmes

Facebook Big Pipe

Page 41: Techniques accélération des pages web #kiwiparty

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

Page 42: Techniques accélération des pages web #kiwiparty

Interactivité avec la fonctionnalité < 5 s

Premier rendu < 2 s

Réponse HTML < 1 s

Chargement de la page < 20 s ?

Objectifs

Page 43: Techniques accélération des pages web #kiwiparty

Tous les outils du monde…

Et WebPageTest

Mesurer

Page 44: Techniques accélération des pages web #kiwiparty

Window.onload() de 20 secondes ?

Facile avec la fibre !

Mesurer

Page 45: Techniques accélération des pages web #kiwiparty

Le site moyen 1,5 Mo 120 requêtes 12 domaines

Page 46: Techniques accélération des pages web #kiwiparty

ADSL Mobiles

Débit 2,5 Mb/s 2,5 Mb/s

Latence 110 ms 200 ms+25% de perte

Connexion réseau à cibler :

Navigateurs à cibler :IE 8Safari iOSAndroid 2.3.x et 4.x

WebPageTest Monitor

Les utilisateurs

Page 47: Techniques accélération des pages web #kiwiparty

Images Iframe Objets flash / vidéo

Ressources gênantes :

Temps onload()

Page 48: Techniques accélération des pages web #kiwiparty

Images

Optimisations :

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

Page 49: Techniques accélération des pages web #kiwiparty

Remplacer la décoration

Caractères unicode ► ♥ ☻☺☎♻⚠★✓⇢✎ ⇨ Dégradés Coins arrondis Ombres sur texte et boîtes Rotation de texte Opacité

http://ikwebdesigner.com/special-characters/

Page 50: Techniques accélération des pages web #kiwiparty

Chargement Just In Time

Méthode de lazy-load :

charger les images visibles

https://github.com/fasterize/lazyload

Page 51: Techniques accélération des pages web #kiwiparty

Sprites

Maintenance Outil : Sass + Compass

Page 52: Techniques accélération des pages web #kiwiparty

Limiter les requêtes

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

IE < 8 : MHTML ⚠ Performance de rendu

Page 53: Techniques accélération des pages web #kiwiparty

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é …

Page 54: Techniques accélération des pages web #kiwiparty

Compression automatique

Ligne de commande PNGOUT OptiPNG Pngcrush JpegOptim Jpegrescan Interface ImageAlpha (pngmini.com) PNGGauntlet ImageOptim

pngquant pngnq-s9 Gifsicle jpegtran

SVG : distribuer en gzip

Page 55: Techniques accélération des pages web #kiwiparty

Pourquoi la performance ?

Un administrateur système heureux

Serveurs tiers

Page 56: Techniques accélération des pages web #kiwiparty

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/jquery.min.js http://html5shiv.googlecode.com/svn/trunk/html5.js

Page 57: Techniques accélération des pages web #kiwiparty

SPOF-O-Matic

Teste la fragilité aux ralentissements des serveurs tiers démo

Page 58: Techniques accélération des pages web #kiwiparty

SPOF

Surveiller : WebPagetest

Fixer : chargements asynchrones

Page 59: Techniques accélération des pages web #kiwiparty

Gérer son cache

Page 60: Techniques accélération des pages web #kiwiparty

« 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

Page 61: Techniques accélération des pages web #kiwiparty

Invalidation des caches longs

Maîtrise totale des URL HTML CSS JS

Processus de compilation URL rendues uniques par :

Numéro de release Md5 du fichier

Expires : +1 anCache-control : publicVary : xxx

Mise en cache long :

Gérer son cache

X

Page 62: Techniques accélération des pages web #kiwiparty

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

Gérer son cache

Page 63: Techniques accélération des pages web #kiwiparty

Gérer son cache

Surveiller : WebPagetest

Page 64: Techniques accélération des pages web #kiwiparty

Configuration serveur

1. Configuration du keep-alive :

2. Activer la compression

KeepAlive OnKeepAliveTimeout 5Timeout 10

Page 65: Techniques accélération des pages web #kiwiparty

Outils : analyse

ySlow

Page 66: Techniques accélération des pages web #kiwiparty

Outils : analyse

Google PageSpeed

Page 67: Techniques accélération des pages web #kiwiparty

Outils : analyse

WebPageTest

Page 68: Techniques accélération des pages web #kiwiparty

Monitoring

Gratuit WPT monitor ShowSlow

Commercial

Torbit Yottaa GTmetrix Dynatrace …

Page 69: Techniques accélération des pages web #kiwiparty

Performance de rendu

Page 70: Techniques accélération des pages web #kiwiparty

Profilers front

IE Developer tools

Page 71: Techniques accélération des pages web #kiwiparty

Profilers front

Dynatrace AJAX

Page 72: Techniques accélération des pages web #kiwiparty

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

Page 73: Techniques accélération des pages web #kiwiparty

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

Page 74: Techniques accélération des pages web #kiwiparty

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

Page 75: Techniques accélération des pages web #kiwiparty

Résumé

Performances Web moderne : Outils

WebPageTest ! Profilers

Monitoring, process WPT Monitor, build, RUM

Techniques : Travailler le chemin critique Chargements juste à temps Connaître ses utilisateurs, faire de la veille

Page 77: Techniques accélération des pages web #kiwiparty

Questions ?

Viens jouer : braincracking.org @theystolemynick

Page 78: Techniques accélération des pages web #kiwiparty

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/photostream/