Accélérer son site sans changer de serveur
Compression, cache navigateur, HTTP/2 et mise en cache côté serveur : les réglages qui divisent le temps de chargement pour une heure de travail.
Avant d'acheter de la puissance, mesurez : la plupart des sites lents ne manquent pas de processeur, ils envoient trop d'octets et ouvrent trop de connexions.
Mesurer d'abord
curl -o /dev/null -s -w 'connexion %{time_connect}s · tls %{time_appconnect}s · premier octet %{time_starttransfer}s · total %{time_total}s · %{size_download} octets\n' https://monsite.fr/Un premier octet lent désigne le serveur ou l'application. Un total lent avec un premier octet rapide désigne le poids de la page. Ce sont deux chantiers différents.
1. Compresser
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript
text/xml application/xml image/svg+xml;Sur du HTML, du CSS ou du JavaScript, la compression retire couramment 70 % du poids. Inutile sur les images et les vidéos, déjà compressées — et les compresser à nouveau coûte du processeur pour rien.
2. Laisser le navigateur garder les fichiers
location ~* \.(js|css|png|jpg|jpeg|gif|webp|svg|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}Un an, à condition que le nom change
Cette durée n'est tenable que si vos fichiers portent une empreinte dans leur nom — style.a3f9c1.css. Sinon, une correction ne parviendra jamais aux visiteurs déjà venus. Les outils de construction modernes le font par défaut ; un site écrit à la main, non : là, restez à quelques heures.
3. HTTP/2
listen 443 ssl;
http2 on;Une seule connexion transporte toutes les requêtes en parallèle au lieu d'en ouvrir six. Le gain est net sur les pages à nombreux fichiers, et il ne coûte qu'une ligne.
4. Mettre en cache côté serveur
Pour un site dont les pages ne changent pas à chaque visite, nginx peut garder la réponse et servir les suivantes sans réveiller l'application.
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=site:10m max_size=1g inactive=60m;
server {
location / {
proxy_cache site;
proxy_cache_valid 200 10m;
proxy_cache_bypass $cookie_session; # jamais de cache pour un visiteur connecté
add_header X-Cache $upstream_cache_status;
proxy_pass http://127.0.0.1:3000;
}
}Le cache et les sessions
Mettre en cache une page personnalisée sans exclure les visiteurs connectés fait servir le panier d'un client à un autre. La ligne proxy_cache_bypass n'est pas une option : c'est ce qui rend le cache utilisable sur un site à comptes.
Ce qui pèse le plus lourd, en général
| Cause | Gain typique |
|---|---|
| Images non redimensionnées, envoyées en pleine résolution | Souvent la moitié du poids de la page |
| Absence de compression | 60 à 80 % sur le texte |
| Requêtes SQL sans index | Plusieurs centaines de millisecondes |
| Polices web trop nombreuses | Quelques centaines de kilo-octets |
| Scripts tiers (analytique, chat, publicité) | Très variable, parfois plus que le site lui-même |
Bloqué malgré tout ? Ouvrez un ticket : on répond en français, et on regarde votre machine si besoin.
Ouvrir un ticket