Cache sur le fichier json
Problématique
Maintenant le filtrage et le tri ne se fait plus côté JS, mais côté PHP lors de la génération du json.
Chez Plasci, ca m'a mis 2 secondes environ lorsque j'ai actualisé un filtre.
1 seconde environ pour que le serveur genère le json, une seconde de transfert.
Indépendamment de la lenteur de plasci, il faudrait idéalement avoir un système de cache.
A priori on utiliseait le plugin cache de @Eric.
La fraicheur
Il faut un cache frais. Le problème est qu'on peut difficilement se baser sur la modif des objets pour déterminer l'invalidation, car en raison des saisies type "objet", les infos peuvent venir de plusieurs objets.
utiliser la meta dernier_modif pour invalider.
La question de savoir comment on invalide et on efface le cache pas valide reste ouverte.
Les paramètres
- crayons/session (voir plus loin)
- ordre des colonnes
- statut des réponses
- id_formulaire
- filtres
- tri
- page
- pagination
Les niveaux
Il faudrait cacher à tout ces niveaux, et rechercher par priorité à ces endroits là
- id_formulaire/statut/ordre colonne/tri/filtres/pagination-page/
- id_formulaire/statut/ordre colonne/tri/filtres/
- id_formulaire/statut/ordre colonne/tri/
- id_formulaire/statut/ordre colonne/
Le problème des crayons
Actuellement la question de savoir si les crayons sont sur une cellule se pose au moment de l'instancisation de la cellule. Il faudrait plutot le faire au moment de l'export JSON, pour ne pas avoir des gens qui obtiendraient le droit de crayonner alors qu'ils en ont pas le droit, en prenant un vieux cache.
Le problème de l'ordre des colonnes
En terme de filtrage/tri l'ordre des colonnes importe, puisque c'est ca qui est envoyé en paramètre.
Vu la complexité qu'il y aurait
- A reordonner côté PHP
- A avoir côté JSON un post qui concerne pas l'ordre
il est clair que l'on va cacher en prenant en compte l'ordre des colonnes, qui normalement varie peu avec le temps
Le problème de tri vs filtres
Certes il est plus rapide de trier une liste deja filtrés que l'inverse.
Mais il arrive plus souvent que les gens changent le tri que le filtre > il vaut donc mieux cacher en priorité le tri puis le filtre. D'autant que la complexité du tri est en temps est de n·log(n)
, ce qui reste raisonnable. Gagner une où deux entrées de filtres fera gagner peu de temps en tri (sauf si on filtre beaucoup).