Accélérer find_in_path()

© Christian PAULUS. Document créé le 2 janvier 2008 , mis à jour le 18 juillet 2011.

Si les faits ne correspondent pas à la théorie, changez les faits. Albert Einstein

Accueil du site > Astuces > SPIP > Accélérer find_in_path()

Squelettes / SPIP 1.9.2c - 2.1.10

Pour optimiser les temps d’accès à votre site, il suffit parfois de simplement recopier quelques fichiers au bon endroit.

Lorsque SPIP cherche un fichier dans l’arborescence du site, il fait appel à sa fonction find_in_path().

La balise #CHEMIN et la fonction chemin() (SPIP 2 uniquement) sont des alias de find_in_path().

Cette fonction find_in_path() cherche le fichier dont le nom est donné en paramètre dans divers répertoires, et ceci dans cet ordre pour SPIP 1.9.2 :

  1. le répertoire des squelettes nommés par la variable globale $dossier_squelettes [1]. Lorsque plusieurs répertoires squelettes sont précisés dans cette variable, le dernier déclaré sera traité en premier ;
  2. le répertoire nommé ’squelettes’ ;
  3. le répertoire racine des plugins activés ;
  4. la racine du site (WROOT) ;
  5. le répertoire de distribution ’dist’ ;
  6. le répertoire ’ecrire’ ;

La recherche du chemin en SPIP 2.1.10

En ce qui concerne la globale dossier_squelettes

$GLOBALS['dossier_squelettes'] = 'premiers_squelettes:seconds_squelettes';

la recherche sera effectuée dans l’ordre de déclarations en SPIP 2.1.10 :

  1. premiers_squelettes
  2. seconds_squelettes

De plus, la fonction _chemin() [2] permet de rajouter un chemin de recherche. Cette fonction est pratique pour les plugins qui désirent préciser un chemin de recherche autre que leur propre racine pour les squelettes.

Cette fonction _chemin() peut être appelée plusieurs fois. La recherche sera effectuée dans l’ordre inverse d’utilisation. Par exemple :

_chemin('ici');
_chemin('la');

donnera l’ordre de recherche :

  1. la
  2. ici

Si vous utilisez pleinement toutes ses options, en SPIP 2.1.10, une recherche sur un fichier sera effectuée par find_in_path() ainsi :

  1. le répertoire des squelettes nommés par la variable globale $dossier_squelettes dans l’ordre de déclaration s’il y en a plusieurs ;
  2. le répertoire nommé ’squelettes’ s’il existe ;
  3. dans les répertoires déclarés par _chemin() dans l’ordre inverse d’appel à cette fonction (le dernier déclaré sera le premier scruté) ;
  4. le répertoire extensions/compresseur ;
  5. le répertoire racine des plugins activés ;
  6. le répertoire extensions/vertebres ;
  7. le répertoire extensions/safehtml ;
  8. le répertoire extensions/porte_plume ;
  9. le répertoire extensions/msie_compat ;
  10. le répertoire extensions/filtres_images ;
  11. la racine du site (WROOT) ;
  12. le répertoire ’squelettes-dist’ ;
  13. le répertoire ’ecrire’ ;
  14. le répertoire ’prive’ ;
  15. et une dernière fois à la racine (WROOT) ! Une deuxième fois ?

find_in_path() fait donc au minimum le tour de deux répertoires : le dossier ’squelettes’ - indirectement, par appel de la fonction creer_chemin() - et la racine du site avant de trouver le squelette dans le répertoire de distribution ’dist’.

Pour peu que vous ayez créé le répertoire ’squelettes’ et ajouté et défini $dossier_squelettes dans mes_options.php, le temps de recherche est au minimum doublé.

Comment accélérer la recherche

Si vous voulez accélérer la recherche de fichiers, recopiez dans ’squelettes’ ou votre $dossier_squelettes l’ensemble des fichiers présents dans le répertoire de distribution ’dist’ (squelettes-dist en SPIP 2) sera probablement une bonne solution.

Ne pas oublier de supprimer les squelettes de votre répertoire de squelettes s’ils sont personnalisés par un plugin. C’est le cas par exemple de LiLo qui propose son propre squelette ’login.html.

Quant à l’option d’optimisation proposée par la modification de

@define('_EXTENSION_PHP', '.php3');
#@define('_EXTENSION_PHP', '');

en mettant en commentaire la première ligne et en activant la seconde dans inc_version.php , elle ne concerne que les appels à include_spip().

Notes

[1] Si besoin, lire le paragraphe consacré à cette globale $dossier_squelettes sur spip.net

[2] La documentation sur _chemin() est disponible sur doc.spip.org.

Plussoyez !

Les forums sont fermés.