SLBCloud
Intermédiaire9 min de lecture

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

bash
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

nginx
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

nginx
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

nginx
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.

nginx
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

CauseGain typique
Images non redimensionnées, envoyées en pleine résolutionSouvent la moitié du poids de la page
Absence de compression60 à 80 % sur le texte
Requêtes SQL sans indexPlusieurs centaines de millisecondes
Polices web trop nombreusesQuelques 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