Fil m'ayant lancé un défi sur IRC, je viens en discuter ici.
Je voudrais mettre en place un système de cache pour find_in_path
Pourquoi ?
Parce qu'avec une dizaine de plugins installés, pour afficher une page déjà en cache, SPIP fait 30 appels à find_in_path qui génèrent 60 recherches de fichiers infructueuses.
Donc, les pistes :
tout comme meta_cache.txt, avoir un fichier find_in_path_cache.txt ou .php
Ce fichier contiendrait :
- soit les chemins des fichiers sérialisés
- soit carrément le php du tableau associatif, fichier/chemin (mais c'est peut-être un peu risqué ?)
Ce fichier serait effacé :
- lorsqu'on vide le cache
- lorsqu'on installe ou désinstalle un plugin
Et la fonction find_in_path modifiée pour :
- chercher comme actuellement en RAM si le fichier cherché est connu
- à défaut chercher via ce cache
- et si pas dans ce cache, modification du fichier (avec spip_flock pour gérer les conflits)
* cedric.morin@yterium.com tapuscrivait, le 19/06/2008 12:57:
non, il n'est heureusement pas nécessaire de vider le cache a chaque fichier créé !
Bien sûr, mais lorsqu'on sait que ce que l'on fait est un gros changement, c'est bien utile de pouvoir vider le cache.
Et j'ai déjà eu le cas avec des <INCLURE> #INCLURE et #MODELE où un var_mode=recalcul ne suffisait pas...
Fil m'ayant lancé un défi sur IRC, je viens en discuter ici.
Je voudrais mettre en place un système de cache pour find_in_path
Pourquoi ?
Parce qu'avec une dizaine de plugins installés, pour afficher une page déjà en cache, SPIP fait 30 appels à find_in_path qui génèrent 60 recherches de fichiers infructueuses.
Donc, les pistes :
tout comme meta_cache.txt, avoir un fichier find_in_path_cache.txt ou .php
Ce fichier contiendrait :
- soit les chemins des fichiers sérialisés
- soit carrément le php du tableau associatif, fichier/chemin (mais c'est peut-être un peu risqué ?)
Ce fichier serait effacé :
- lorsqu'on vide le cache
- lorsqu'on installe ou désinstalle un plugin
Et la fonction find_in_path modifiée pour :
- chercher comme actuellement en RAM si le fichier cherché est connu
- à défaut chercher via ce cache
- et si pas dans ce cache, modification du fichier (avec spip_flock pour gérer les conflits)
Est-ce que j'ai oublié quelque chose ?
Voici déjà un patch permettant de journaliser ce que trouve ou pas find_in_path.
Du coup, je me lance dans l'optimisation de quelques plugins.
Marcimat, je constate que cfg a pas mal de find_in_path pour ses propres fichiers :
inc/cfg_config.php
balise/cfg_arbo.php
balise/cfg_config.php
Est-ce bien nécessaire de faire find_in_path pour ces fichiers ?