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