Découvrez les défis et les possibilités d'intégration du CMS TYPO3 dans une architecture hautes performances.
Au delà des principes et concepts généraux liés aux performances, nous y abordons les optimisations frontend, d'architecture, d'hébergement et bien évidemment l'optimisation de TYPO3.
Nous y évoquons enfin les bonnes pratiques et nos préconisations dans la mise en place de ces solutions.
Ce document a été présenté lors de la T3UNI 15 à Annecy.
2. 2
QUI SUIS-JE ?
ROMAIN LELEU
Responsable Technique
Direction Technique Groupe Smile
T3Uni 2015
Hautes performances & TYPO3
Partenaire GOLD
&
Des collaborateurs
experts et certifiés
T3UNI FR,
T3CON EU,
Code Sprint
3. 3
PERFORMANCES
De vitesse !
Essentiellement le temps entre une requête et :
o l’affichage « au dessus de la ligne de flottaison »
o l’affichage complet de la réponse
De résistance aux pics de charge
Période de solde ? Actualité chaude ?
Ces 2 facteurs sont intimement liés
Le temps est relatif, avec des seuils psychologiques
< 100ms = instantané
~ 1sec = chargement perceptible
> 2sec = attente = frustration
9.58sec = une éternité
T3Uni 2015
Hautes performances & TYPO3
DE QUOI PARLE-T-ON ?
4. 4
PERFORMANCES
Plus de clients
Selon Akamai 40% des internautes n’attendent pas 3 secondes.
Le mobile impose des contraintes supplémentaires.
S’adresser à des zones géographiques plus larges.
Plus de satisfaction
Meilleure image de marque.
Donner l’envie de revenir.
Meilleur référencement
Critère de référencement Google depuis 2010.
Moins de ressources consommées = économies
Dépenses d’hébergement réduites.
T3Uni 2015
Hautes performances & TYPO3
POURQUOI ?
8. 8
OPTIMISER LE FRONTEND
Des ressources externes - souvent bloquantes
Impliquent des requêtes réseau supplémentaires
Le navigateur doit attendre leur réception pour pouvoir « comprendre », charger la
ressource suivante et enfin afficher la page
Organiser et retravailler ces ressources
Réduire l’accès à des fichiers externes
o concaténation, utiliser les CDN publics (CDNJS Cloudflare, Google)
Réduire leur taille
o cascade, url relatives, minification, compression
Intégrer le minimum vital directement dans le corps de la page
Décaler le chargement du reste
o Balises <link> & <script> en fin de page
o Attribut « async »
T3Uni 2015
Hautes performances & TYPO3
CSS & JS
9. 9
OPTIMISER LE FRONTEND
TYPO3 propose beaucoup de réglages
config.compressJs // config.compressCss
config.concatenateJs // config.concatenateCss // config.concatenateJsAndCss
page {
includeJS {
async
disableCompression
excludeFromConcatenation
}
includeJSFooter
includeJSLibs
includeJSFooterlibs
jsInline
jsFooterInline
includeCSS
includeCSSLibs
}
$GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel']
Et pourtant certains cas ne sont pas intégrables facilement
Heureusement les extensions et le Typoscript sont là
T3Uni 2015
Hautes performances & TYPO3
CSS & JS
10. 10
FRONTEND
Images = temps de chargement à surveiller
Les points d’attention
Format de fichier: JPEG & PNG en priorité
Beaucoup de ressources: sprite CSS
Dimensions des images selon la cible
Demain: WebP ?
TYPO3 propose des outils complets
Conversion de format
Redimensionnement
Suppression des meta-data
Responsive image
T3Uni 2015
Hautes performances & TYPO3
IMAGES
11. 11
FRONTEND
Exploiter le cache des navigateurs
Librairies JS depuis les CDN publics
Définir les en-têtes:
o « Expires » ou « Cache-control »
o « Etag » ou « Last-Modified »
Configurer l’envoi des en-têtes dans TYPO3
o Typoscript: config.sendCacheHeader
TYPO3 ajoute automatiquement un timestamp aux ressources générées
pas de problème d’invalidation de cache
/typo3temp/compressor/merged-8cf49e3.css?1435048000
T3Uni 2015
Hautes performances & TYPO3
MISE EN CACHE
12. 12
FRONTEND
Permet de ne pas recharger une page complète
Single Page Application (SPA) idéal pour un flux JSON
EID & Widget: Bootstrap du noyau plus léger
Consommation CPU et mémoire réduite
N’activera que ce qui est demandé
o Base de données
o User
Simplicité d’utilisation
Exemple: <f:widget.paginate>
T3Uni 2015
Hautes performances & TYPO3
PAGE TYPE, EID & WIDGET
14. 14
OPTIMISER TYPO3
TYPO3 propose un cache efficace
Il est indispensable de l’exploiter et de comprendre son fonctionnement
Différents types de cache
Cache de configuration
Cache de code (TSconfig: options.clearCache.system = 1 )
Cache de page
Cache de page = page + blocs
Exploiter correctement les USER/USER_INT et le cHash
Tout est expliqué dans la doc TYPO3 !
Configurer les caches
Durée
Backend: fichiers, SQL, Redis, APC, Memcached
T3Uni 2015
Hautes performances & TYPO3
LE CACHE - PRINCIPES
15. 15
OPTIMISER TYPO3
Définir des politiques de cache différentes dans une même page
T3Uni 2015
Hautes performances & TYPO3
LE CACHE – PAR BLOCS ?
16. 16
OPTIMISER TYPO3
Différents content objects
USER/USER_INT & COA/COA_INT
A la base du cache par blocs
stdWrap.cache
Gestion des clés, des tags et de la durée
HMENU.cachePeriod
Menu = beaucoup de typolink = lent
24h par défaut, peut souvent être étendu
ViewHelper render.cache (VHS)
{v:render.cache(identity: [mixed], content: [mixed], onError: 'NULL', graceful: 1)}
nc_static_filecache
Créé une version HTML statique de la page. Mod Rewrite sert ces fichiers en priorité.
Ne fonctionne que sur des pages entièrement en cache (pas de USER_INT !).
T3Uni 2015
Hautes performances & TYPO3
LE CACHE – OUTILS
17. 17
OPTIMISER TYPO3
Certaines versions sont plus performantes que d’autres
Version 7.1 et supérieures
Suppression du « code mort » et des alias de classes
Autoloader PSR-4 de Composer (backporté en 6.2.10)
Frameworks javascript plus légers
ViewHelpers compilables
Compatibilité avec les versions de PHP 5.5 et supérieures
Compression et concaténation CSS/JS améliorées
T3Uni 2015
Hautes performances & TYPO3
LE BON NOYAU
18. 18
OPTIMISER TYPO3
Désactiver les sessions Frontend
Désactiver les FeGroup et les FeUser
Pas d’authentification ? Pourquoi s’embêter !
Désactiver les extensions « lourdes »
Workspaces
Versionning
Dbal
Compatibility6
Désactiver les logs les plus détaillées en production
Deprecation Log
T3Uni 2015
Hautes performances & TYPO3
RÉDUIRE L’EMPREINTE DU NOYAU
19. 19
OPTIMISER TYPO3
Désactiver les caches
TSFE->set_no_cache()
?no_cache=1
USER_INT à la place d’un USER avec un cHash
Conditions Typoscripts
Chaque cas d’une condition = un hash différent = un cache différent
Remplacer le baseURL et ses conditions par un « config.absRefPrefix »
Le mauvais code PHP
Développements spécifiques
Extensions communautaires non auditées
Erreurs, Warnings et Notices sont couteux en ressources
T3Uni 2015
Hautes performances & TYPO3
CES CHOSES À ÉVITER
21. 21
OPTIMISER L’INFRASTRUCTURE
Apache c’est lourd, remplaçons le par Nginx
Fausse bonne idée !
o Cela ne change rien sur les pages TYPO3 (et le PHP en général)
o Apache 2.4 se permet même d’aller un peu plus vite à condition de désactiver
le support des .htaccess
Oui mais les fichiers statiques ? Il y a mieux que Nginx pour ça…
Configurer mod_expires et mod_deflate
Pré-requis essentiels pour une bonne gestion des ressources Frontend.
TYPO3 fournis quelques exemples dans sont fichiers .htaccess.
Désactiver le support des .htaccess
T3Uni 2015
Hautes performances & TYPO3
APACHE
22. 22
OPTIMISER L’INFRASTRUCTURE
Plus PHP est récent plus il va vite.
Moins de consommation mémoire, plus de vitesse
PHP 5.6 = ♥
PHP 7 = PHP NG = ♥ ♥ ♥
o Wordpress est 2 fois plus rapide, 75% de consommation CPU en moins
o Plus rapide que HHVM ! 39% d’amélioration sur Laravel
o Disponibilité annoncée pour octobre 2015 (sources: Zend.com)
Cache d’opcode
APC / Opcache selon la version de PHP
De x2 à x10 en temps d’exécution
PHP-FPM = fastCGI sans les défauts
Surveiller les logs
Chaque log est couteux. Eviter les erreurs/warning/notice.
T3Uni 2015
Hautes performances & TYPO3
PHP
24. 24
OPTIMISER L’INFRASTRUCTURE
MySQL 5.7 = gain de performance
Moteur InnoDB largement amélioré
IOPS: 2x plus que 5.6 // 3x plus que 5.5 (iops = input/output per second) (source: Sysbench)
Sharding facilité par « Fabric » et une réplication améliorée
Configuration et hardware adaptés
Allouer la mémoire nécessaire aux buffers et index
SSD / FusionIO & RAM conséquente
Développements spécifiques
Penser à ajouter des index pertinents !
Activer l’extension indexed_search_mysql
Analyser les requêtes et surveiller les logs
En particulier le Slow Query
Maria DB et Percona sont des alternatives à surveiller
T3Uni 2015
Hautes performances & TYPO3
MYSQL
25. 25
OPTIMISER L’INFRASTRUCTURE
Varnish
Son but principal: décharger le serveur HTTP
o Supporte plusieurs milliers de requêtes par seconde
Load balancing / Failover
WAF (un peu seulement)
Conjuguer TYPO3 et ESI
ESI = Edge Side Include
o <esi:include src="index$(GEO{'country_code'}|'US').html" alt="indexUS.html"
ttl="2h" maxwait="5000"/>
o Peut contenir des règles de calcul avancées
Le mécanisme colle au principe du cache par bloc de TYPO3
Plusieurs extensions TYPO3 facilitent la gestion du cache
moc_varnish, varnish, vcc, proxycachemanager
T3Uni 2015
Hautes performances & TYPO3
PROXY CACHE HTTP
28. 28
OPTIMISER L’INFRASTRUCTURE
Rapprocher le contenu du visiteur
Répondre plus vite
Répartir la charge
Quelques solutions
Akamai FastDNS & AuraCDN
Amazon Route53 & CloudFront
CloudFlare
Extension TYPO3: smile_cdn
Défaut principal: vidage du cache pas toujours facile
A réserver aux ressources statiques plutôt qu’aux pages
Solutions gratuites
CDN publics pour les Javascripts
Utiliser un domaine différent pour servir les ressources statiques + varnish
T3Uni 2015
Hautes performances & TYPO3
CDN & DNS
29. 29
OPTIMISER L’INFRASTRUCTURE
Scaling horizontal
Améliore aussi la disponibilité en cas de panne
Ajouter des serveurs web
o Gestion des sessions PHP dans Redis
o Synchronisation du système de fichiers (SAN)
Ajouter des serveurs MySQL
o Répartition Master/Slave
o Diriger les requêtes SELECT en priorité vers les Slaves
MySQL Proxy
Backend MySQL spécial pour TYPO3
Solutions Cloud type Amazon (EC2 + S3 + RBS)
Scaling vertical
Ne pas rester sur des vieilles machines !
Peu complexe à mettre en place
T3Uni 2015
Hautes performances & TYPO3
SCALING
31. 31
TESTER & ANALYSER
La première étape avant d’agir
Pour mieux cibler nos efforts
Pour quantifier les gains
Se placer dans un environnement adapté
Stable
Permettant de faire varier un seul paramètre à la fois
Des outils suffisamment puissants pour simuler une charge importante
Le bon outil pour le bon test
T3Uni 2015
Hautes performances & TYPO3
AVANT TOUTE CHOSE…
32. 32
TESTER & ANALYSER
Analyse
PageSpeed (Google)
Yslow (Yahoo)
GTMetrix
Webpagetest.org
PingDom
Profilers PHP: BlackFire / Xhprof / Xdebug
Et bien sur les logs des applications !
Monitoring
New Relic
Montée en charge
jMeter /ApacheBench / Siege / Tsung
T3Uni 2015
Hautes performances & TYPO3
LES BONS OUTILS
36. 36
HAUTES PERFORMANCES & TYPO3
Viser les macro-optimisations en premier
Donne les résultats les plus visibles, rapidement
Même s’il est tentant de ne creuser qu’une direction
Identifier les pages critiques et leur point de blocage
La page d’accueil concentre la plupart des hits
Elle est souvent le point de départ
Tester, analyser et surveiller en continu
Le site et les visiteurs évoluent: de nouveaux blocages peuvent apparaitre
Chercher la simplicité: KISS
Exploiter le cache TYPO3 et Varnish !
T3Uni 2015
Hautes performances & TYPO3
PAR OÙ COMMENCER ?
37. 37
HAUTES PERFORMANCES & TYPO3
Wiki TYPO3
http://wiki.typo3.org/Performance_tuning
Mailing List « TYPO3 Performance »
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-performance
Slack
https://forger.typo3.org/slack
Et pout tout le reste Google, StackOverflow, SlideShare…
T3Uni 2015
Hautes performances & TYPO3
OÙ TROUVER LES INFOS ?