esup-pod

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Avant toute optimisation, on avait les résultats suivants :

  • Sur Pour un lien vers une vidéo : mobile 22% / desktop 5757%
  • page d'accueil : on avait pas regardé (clin d'œil)

Au niveau d'nginx, voici ce qu'on a fait :

  1. Indiquer à nginx de servir des

...

  1. versions compressées des fichiers statics

Avec ca, lorsque nginx trouve un fichier "file.css.gz" dans le dossier static, il l'envoie à la place de la version standard (le navigateur fera la décompression)

Bloc de code
titlepod_nginx.conf
location /static {

	gzip_static  on;

	gzip_types text/plain application/xml text/css text/javascript application/javascript image/svg+xml;

	[...]
}

Pour que ca marche bien, il faut bien sûr avoir des fichier ".gz", on lance donc manuellement un script shell :

Bloc de code
languagebash
titlecompress_static.sh
#!/bin/bash
# Generate compressed versions of all statics files to be served by nginx

cd podv2/pod/static/
for file in $(find . -type f)
do
    if [[ $file =~ .*\.(css|js|svg)$ ]]
    then
        gzip -fk "$file"
    fi
done

==> cette étape pourrait être inutile à partir du moment ou on installe https://github.com/whs/django-static-compress

2. Activer la compression à la volée par nginx des contenus textuels non statics

pour optimiser la bande passante, on peux aussi améliorer les perfs en demandant à nginx de compresser à la volée les contenus textuels. voici ce qu"on a ajouté à pod_nginx.conf :

Bloc de code
titlepod_nginx.conf
    # Django media
    location /media {
        gzip on;
        gzip_types text/vtt;
        [...]
    }

    [...]

    # Finally, send all non-media requests to the Django server.
    location / {
        gzip on;
        uwsgi_pass  django;
    	[...]
    }

nb : pour que les fichiers vtt soient reconnus comme texte, on les a ajoutés comme "text/vtt" dans /etc/ningx/mime.types


3. Mise en cache

Nous avons défini la politique de mise en cache suivante (1 an sur /media, 60j sur /static) :

Pour plus d'infos sur l'importance de définir des "expires", je vous invite à suivre cette doc : Éviter les mises en cache de durée imprévisible des fichiers statiques

Bloc de code
titlepod_nginx.conf
location /media {
  expires 1y;
  add_header Cache-Control "public";
  [...]
}

location /static {
  expires 60d;
  add_header Cache-Control "public";
  [..]
}

==> avec l'ensemble de ces changements, on est passé d'un score de 22/57 à 40/77 (mobile/desktop) à Nice

Sur la page d'accueil, on est aujourd'hui à 81%/95%