Post on 30-Jul-2015
Introduction à django compressorMathieu Pillardhttps://github.com/diox@dioxmat
Rencontres django-fr, 16 avril 2011
Présentation
● Application de « gestion » de medias... ● … sans l'aspect gestion● Au départ juste une collection de filtres pour
django_compress● Documenté, testé, maintenu● Résout la problématique de base de faire cacher
longtemps vos fichiers médias tout en permettant de les expirer immédiatement quand ca change
Principes
● Transparent pour les développeurs● De base, pas de commande de management à
lancer● Pas de « bundle » à créer dans les settings non
plus
Fonctionnement de base
● Utilisation du templatetag {% compress %} : {% compress css %}<link rel=stylesheet type=text/css href= 1.css><link rel=stylesheet type=text/css href= 2.css><style type=text/css>.pony { color : pink ;}</style>{% endcompress %}
● Rendu :<link rel=stylesheet type=text/css href=<hash>.css
Ce que ca sait faire
● Changement automatique et à la volée du ou des fichiers résultat quand les sources changent
● Filtres disponibles : Minification, Tidy, Closure, Transformation automatique des urls en data URI ...
● « Pre-compilers » disponibles : LESS, Cofeescript, SASS
● Gère le suffixage des images dans les CSS
● Utilisation du cache django
● Utilisation des moteurs de stockage django pour le fichier résultat
● Commandes de management optionnelles pour générer en « offline » plutôt que en live, ou générer un cache des dates de modification des fichiers
Comment ca fonctionne derrière
● Vérification du cache « offline » avec un hash de la nodelist brute. Si présent, retourne alors l'HTML.
● Instanciation d'un parseur (lxml/beautifulsoup), détermine la liste des fichiers, utilise leur nom + date de modif pour faire une clé unique
● Vérification du cache principal à partir de cette clé. Si présent, retourne alors l'HTML.
● Génération du fichier, application filtres/pre-compilers, génération d'un hash, écriture du fichier si nécessaire, remplissage du cache, retourne l'HTML
Conclusion
● Utilisé en production sur les projets django de libération● Le cache est obligatoire pour ne pas utiliser trop de
ressources, mais après, ca fuse !● Plein de settings optionnels sympas● Bien maintenu, pas mal de contributeurs, bien documenté
(comment ca je répète l'intro)● Bref, c'est super, utilisez le ! :-)● https://github.com/jezdez/django_compressor , disponible
aussi sur pypi