Forum

Need some help? Ask our community for its assistance!

You are not logged in.

#1 19-06-2020 20:04:04

Cédric
Membre
Registered: 04-04-2012
Posts: 64

Django et gestion du cache

Bonjour,

Quand je déploie des sites en HTML/PHP en passant par apache, j'ai l'habitude de régler certaines valeurs via le ".htaccess", notamment ce genre de choses pour permettre aux browsers de mettre en cache les images.

ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresDefault "access plus 1 hour"

Pour un site Django, comment puis-je m'y prendre pour obtenir le même genre de choses ?

J'utilise le système "ManifestStaticFilesStorage" de façon à ce que la commande "collectstatic" génère des noms de fichiers suffixés par un hash du contenu. Je peux donc sans danger laisser un browser mettre ça en cache très longtemps. Sauf que, je ne sais pas trop comment faire ^^

Quand je passe mon site dans un Google PageSpeed Insights, je vois bien que le TTL n'est pas indiqué.

Puis-je utiliser le cache activable via le panneau d'administration alwaysdata pour ça ? Dois-je activer quelque chose dans Django en plus pour que ça fonctionne bien ?

Et comment faire pour activer le cache uniquement sur les fichiers "static" (qu'on configure d'ailleurs spécifiquement pour Django) ? Est-ce que votre système de cache en tient compte automatiquement ? Parce que je ne voudrais pas l'activer pour tout.

Merci,

Offline

#2 22-06-2020 14:24:17

@Cyril
Staff
From: Paris
Registered: 06-02-2007
Posts: 5,676
Website

Re: Django et gestion du cache

Bonjour,

Première solution, si vous souhaitez utiliser Apache, c'est de créer un site de type Fichiers statiques pour servir vos fichiers statiques, en parallèle de votre site de type WSGI qui sert votre application Django. Dans ce cas vous pourrez alors utiliser un fichier .htaccess « comme d'habitude ».

Seconde solution, garder vos fichiers statiques servis par votre site WSGI, donc par uWSGI, et rajouter des directives uWSGI pour définir les en-têtes Expire. C'est relativement compliqué, je déconseille cette option.

L'activation du cache HTTP, dans les options de votre site, active le cache au niveau du proxy HTTP frontal, qui est devant votre Apache ou uWSGI. En l'activant, les réponses HTTP servies par vos applications et qui sont cachables seront alors cachées, et donc renvoyées plus rapidement. C'est surtout utile pour les pages NON statiques (parce qu'un fichier statique est déjà extrêmement rapide à être servi, donc l'intérêt est moindre).

Si vous souhaitez activer le cache uniquement pour les fichiers statiques, alors on revient sur la première solution que j'expose : avoir 2 sites, un dédié aux fichiers statiques, sur lequel vous pouvez activer le cache.

Offline

#3 23-06-2020 10:06:53

Cédric
Membre
Registered: 04-04-2012
Posts: 64

Re: Django et gestion du cache

Bonjour,

Merci pour cette réponse très claire :-)

J'ai déclaré un second site de type Fichiers statiques et ça fonctionne très bien.

Je dois dire que je suis agréablement surpris de la façon dont ça marche !

En effet, je m'attendais à devoir le configurer avec un sous-domaine (ou un autre domaine). Mais ce n'est même pas nécessaire. Dans la partie "Sites" de l'administration AlwaysData, j'ai pu faire ceci:
* Le site Django est déclaré à l'adresse BASE_URL/
* Le second site Fichiers statiques est déclaré à l'adresse BASE_URL/static/

Donc j'ai pu conserver le même chemin d'accès et l'unique domaine.

Visiblement ça fonctionne, mais pour être sûr, n'aurais-je pas un souci en faisant ça (en servant un site avec un chemin "plus bas" qu'un autre site je veux dire) ?

Merci,

Offline

#4 23-06-2020 10:08:31

@Cyril
Staff
From: Paris
Registered: 06-02-2007
Posts: 5,676
Website

Re: Django et gestion du cache

Bonjour,

Aucun souci, c'est conçu pour smile

Offline

#5 23-06-2020 10:16:47

Cédric
Membre
Registered: 04-04-2012
Posts: 64

Re: Django et gestion du cache

Toujours aussi bien AlwaysData !

La plateforme technique au top et les gens qui assurent le support de tout ça :-)

Offline

Board footer

Powered by FluxBB