Arborescence des pages

Afin d'optimiser au mieux nos serveurs pod, je vous invite à partager ce que chacun a pu mettre en place pour optimiser son serveur.

Avant propos

Si vous souhaitez savoir ou se situe votre serveur Pod en terme d'optimisation, je vous propose de le tester par exemple via PageSpeed :

https://developers.google.com/speed/pagespeed/insights

À titre de référence, le serveur pod.univ-lille.fr donne les scores suivants en février 2021 (pod v2.7.3.1) :

  • Page d'accueil : mobile 66% / desktop 88%
  • Sur une vidéo : mobile 31% / desktop 71%

(plus le score est élevé, mieux c'est)

À Nice

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

  • Pour un lien vers une vidéo : mobile 22% / desktop 57%
  • 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 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)

pod_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 :

compress_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 :

pod_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

pod_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%


  • Aucune étiquette