5. Du cache pour PHP & Drupal
> Décharger PHP
• APC
Requête Requête
Lecture Opcodes
Compilation PHP dans APC
HIT MISS
APC
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 Temps de réponse
(ms)
• 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...
10. Du cache pour PHP & Drupal
> Décharger MySQL :
cacher en base ?
●
MongoDB
●
REDIS
●
MySQL !
11. URL
Optimiser les images
Imagecache
External
> External cache
• Une image externe = une image Image Image
comme une autre
(pas de résolution de domaine supplémentaire)
Image / Image Cache
> Image cache
• Une taille = une image
(pas de redimension via JS / CSS) Image Image Image Image
> Optimize
• Une image = une image optimisée Image Optimize
en poids
(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 Page affichée
site.com HTML site.com HTML
site.com CSS static1.site.com CSS JS Image
CSS
CSS
site.com static2.site.com CSS JS Image
JS CDN
JS -
URL
site.com static3.site.com CSS
Image Sharding Image
Image
Image
Temps 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 HTML site.com HTML
static1.site.com CSS JS Image static1.site.com
CSS JS
Image
static2.site.com CSS JS Image
static2.site.com CSS JS
Head.js
(ou Lab.js) Image
static3.site.com CSS Image
static3.site.com CSS
Image
Temps
Temps
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, ...