5. Du cache pour PHP & Drupal
> Décharger PHP
• APC
Requête
Requête
Lecture Opcodes
dans APC
Compilation PHP
APC
HIT
MISS
Exécution des opcodes
Exécution des opcodes
Compilation PHP
Fin de requête
Fin de requête
Exécution des opcodes
Fin de requête
6. Du cache pour PHP & Drupal
> Décharger PHP
• APC 3.1.9
// allocate one segment of 32Mb
apc.shm_segments=1
apc.shm_size=32
// do not check if php file was updated
apc.stat= 0
// never expire
apc.ttl = 0
// use kernel anonymous memory
apc.mmap_file_mask = /dev/zero.
Pour les geeks : http://www.techpresentations.org/APC_at_Facebook
8. On mesure !
• Deux façons d'accélérer
– Gonfler le moteur
– Réduire les causes de lenteur
• Travailler moins
• Travailler mieux
• Facile !
– Tout cacher ?
– NoSQL plus rapide ?
– La « littérature » de fanboy/marketer
– curl vs browser, ou back vs front
9. Du cache pour PHP & Drupal
> Décharger MySQL
• APC
• Memcache
• Le cache Drupal est par défaut stocké en
base de données
• Déplacer le cache en mémoire (memcache)
permet de retourner les données vite, mais
surtout retire de la charge à la base
• 1 instance memcache par cache (views,
page, block, …) facilite la manipulation du
cache. D6 vs D7
• Mais un cache n'est pas une base...
Temps de réponse
(ms)
10. Du cache pour PHP & Drupal
> Décharger MySQL :
cacher en base ?
MongoDB
●
REDIS
●
MySQL !
●
11. URL
Optimiser les images
> External cache
• Une image externe = une image
comme une autre
Imagecache
External
Image
Image
(pas de résolution de domaine supplémentaire)
Image / Image Cache
> Image cache
• Une taille = une image
(pas de redimension via JS / CSS)
Image
> Optimize
• Une image = une image optimisée
en poids
Image
Image
Image
Image Optimize
(pas d'image de 2Mb!!)
Image
Image
Image
Image
17. Chargements & affichages des pages
> Paralléliser les téléchargements
•CDN (URL sharding)
Page affichée
site.com
site.com
Page affichée
site.com
HTML
HTML
static1.site.com
CSS
CSS
static2.site.com
CSS
static3.site.com
CSS
JS
Image
CSS
CSS
site.com
CDN
URL
Sharding
JS
JS
site.com
Image
JS
Image
Image
Image
Temps
Image
Temps
18. Chargements & affichages des pages
> Profiter un maximum du cache navigateur
• CDN (far future)
• Tant que l’agrégat CSS et/ou JS n'a pas
changé, ne pas le recharger !
• Idem pour les images et autres
ressources statiques !
19. Chargements & affichages des pages
> Upload de cookie & ressources statiques
• Une image, un fichier CSS, ou bien un fichier JS ne
doivent pas nécessiter d'information relative a
l'utilisateur.
• Sur une connexion DSL standard, un cookie de 500
octets fait perdre environ une milliseconde par requête
(100 images, 100 requêtes => 100 millisecondes de
perdu)
Module CDN & URL Sharding
+
$cookie_domain (settings.php) sur le domaine principal
=
Des domaines (pour les ressources statiques) sans cookies !
20. Chargements & affichages des pages
> Les JavaScripts, tendances & bloquants !
• De plus en plus de JavaScripts sont utilisés
• Le chargement d'un JavaScript est bloquant
Page affichée
Page affichée
site.com
site.com
HTML
static1.site.com
CSS
JS
HTML
static1.site.com
Image
CSS
JS
Image
static2.site.com
CSS
JS
Image
Head.js
(ou Lab.js)
static3.site.com
CSS
static2.site.com
CSS
Image
Image
static3.site.com
CSS
Image
Temps
Temps
JS
21. Cache des pages & ressources
> Varnish
Anonymes vs authentifiés
●
Expiration vs invalidation
●
ESI
●
22. Analyse : caches
Snapshot control
●
APC control panel
●
Memcache
●
control panel
●
Drupal memcache_admin
●
phpmemcacheadmin
●
History / baseline
●
Munin, ...
●
SaaS : NewRelic
●
Events : Nagios, ...