Aller au contenu

Performance et cache

Pour la pile de cache au niveau du site (Redis, WP Super Cache, cache HTTP, monitoring et sauvegardes), voir Pile de cache.

Le plugin utilise les transients WordPress pour mettre en cache les réponses GeoJSON, évitant ainsi la regénération à chaque requête :

Motif du transientTTLFonction
irisolaris_plants_geojson_{md5}7 jours (complet), 1 jour (filtré)FeatureCollection GeoJSON mise en cache

La clé du transient inclut un hash MD5 composé de :

  • Les paramètres de filtre (statut, région)
  • Le numéro de version du cache (irisolaris_plants_cache_version)
Déclencheur (save/delete plant, changement de terme)
└── API::invalidate_plants_cache()
└── bump_cache_version()
└── irisolaris_plants_cache_version += 1
└── Requête suivante → nouveau MD5 → cache miss → requête fraîche
Les anciens transients expirent naturellement (TTL de 7 jours)

Déclencheurs :

  • save_post (toute sauvegarde d’un irisolaris_plant)
  • delete_post (toute suppression d’un irisolaris_plant)
  • set_object_terms (changements de termes de taxonomie)

Comportement :

  • Le compteur de version s’incrémente automatiquement
  • Les nouvelles requêtes utilisent la nouvelle version dans le hash MD5, provoquant un cache miss
  • Les anciens transients ne sont pas activement supprimés — ils expirent naturellement après leur TTL
  • Avec le cache objet Redis, les transients sont stockés dans Redis plutôt que dans la base de données

Les administrateurs peuvent purger manuellement le cache GeoJSON via :

  • Centrales PV → Importer → bouton “Clear cache”
  • Cela déclenche le handler AJAX irisolaris_clear_cache

Les imports en masse de milliers de centrales peuvent être coûteux. Pendant ces opérations, le plugin applique plusieurs optimisations au niveau WordPress pour éviter les timeouts et réduire la charge sur la base de données.

OptimisationFonction
wp_suspend_cache_invalidation()Empêche les reconstructions de cache pendant les opérations par lots
wp_defer_term_counting()Diffère le comptage des termes de taxonomie jusqu’à la fin du lot
update_meta_cache()Pré-charge le cache des métadonnées en masse pour réduire les requêtes individuelles
update_object_term_cache()Pré-charge le cache des termes en masse
Taille de lot : 200 lignesÉvite les timeouts PHP lors des imports volumineux
SQL en masse pour la suppressionContourne l’API WordPress des posts pour une suppression plus rapide

Les sections ci-dessous résument comment les différentes couches de cache interagissent à l’exécution pour offrir des chargements de page rapides et des interactions cartographiques réactives.

  1. Thème cartographique — Mis en cache par le navigateur (cache HTTP, 30 min)
  2. GeoJSON — Mis en cache via transient (7 jours), cache HTTP (30 min)
  3. Tuiles cartographiques — Mises en cache par le navigateur depuis le CDN OpenFreeMap
  4. Clustering — Côté client (MapLibre), réduit les éléments DOM pour plus de 2 000 centrales
  • Cache objet Redis — Réduit les requêtes en base de données pour les opérations WordPress répétées
  • Colonne dens7 indexée — Recherches de densité rapides lors des vérifications d’éligibilité
  • Requêtes meta work_id — Utilisées pour la logique d’upsert lors des imports