Re: Première version
Eric Daspet <[email protected]> Tue, 30 Mar 2004 20:08:36 +0200
| Newsgroups | gmane.comp.web.blogv2.devel |
|---|---|
| Message-ID | <[email protected]> |
Olivier Pascal wrote: > Si je déclare selon ton modèle que "Je suis le module Identification et > j'implémente un gestionnaire qui doit être absolument exécuté avant le module > X" et que je supprime le module X ? quand va se dérouler l'identification ? Sans problème. Si le module X n'existe pas la condition est automatiquement validée. En interne je crée un module virtuel X qui ne contient rien, le temps du tri. Après le tri je supprime tous les virtuels pour ne pas trop faire de bordel. > Si c'est bien ce que je pense, ça me parrait gérable avec 2 ou 3 modules mais > dès que tout le monde se mettra à en créer ... L'option permet justement de faire du virtuel. On peut se permettre de créer un faux module "identification", à chacun de se placer par rapport à la phase d'authentification (avant/après). Mais chacun peut positionner ses propres étapes en plus (virtuelles ou pas). On reste décentralisés. > Ce qu'il faudrait peut-être c'est rammener les dépendances aux modules > initiaux comme "core" ou "UriParser". Le core pourrait contenir des > évènnements standards de référence dans le core, "initialisation", > "transformation", et "sortie" par exemple. Le module "Identification" > pourrait définir un évènnement de haute priorité placé juste après > "initialisation" pour se lancer en premier. C'est un peu ça, sauf que n'importe qui peut créer une référence qui servira aux autres modules. Il sera en effet indispensable de définir nous même quelques noms de base pour symboliser les étapes courantes. Ceci dit logiquement ces étapes de bases devraient se retrouver être justement les modules qu'on implémentera en premier (identification, interprétation, transformation ...) > Mais il y a toujours un > problème : si je veux définir un évènnement pour lancer un gestionnaire de > module de Log juste avant "idenfication" ? dans log tu mettra : <just-before>identification</just-before> > Moi je pensais laisser les modules se débrouiller avec leurs fichiers de conf > (un ou plusieurs) vu que IniHandler les cache automatiquement dès de leurs > première ouverture. > Les fichiers de conf INI sont dans tous les cas à utiliser avec parcimonie ! > (voir fs.php) Oui, mais qui dit fichier de cache dit au moins 1 accès en lecture et deux accès stat(). Avec 20 modules ça devient non négligeable. Là la seule différence c'est qu'on charge tout d'un coup pour éviter de le faire ensuite, mais sinon ça ne change pas grand chose. > Exact. Toujours pour rabacher les 2 ms qui ne me paraissent pas exégérés > permettent de gagner en souplesse et en facilité d'utilisation alors que ta > méthode impose de faire des copies de fichiers, de gérer ce cache, et ne > permet pas de gérer les sous-dossiers. Imagines mes 20 modules. Dans l'idéal la classe du premier module aura besoin d'une lecture de rep, la classe du second aura besoin de 2, etc. On va avoir au minimum 1+2+3+4+5....+20 = 100 lectures de rep juste pour charger 1 classe par modules. Si on en charge plusieurs ou qu'on autorise les sous-rep dans les modules on va vite exploser. Si on rajoute la même chose pour les fichiers de conf, pour les data .... on va finir par faire plus de 300 accès fichiers juste pour afficher un article. Là ce n'est même plus de la perf, c'est carrément pour ne pas diminuer la durée de vie du disque ;) Ceci dit la méthode prévue peut tout à fait gérer les sous dossiers, il suffit de faire explorer un peu plus loin à la génération. La seule différence réelle c'est que l'exploration n'aura lieu qu'une fois à la génération et plus pendant les exécutions. > A ce momment là les notions de valeurs booléennes, d'options, indexs, etc. ne > servent plus à grand chose, autant utiliser en tout et pour tout > parse_ini_file() ! Pourquoi ? le contenu est le même. Les options, les valeurs booléennes, les listes et le reste servent toujours. La seule différence est de savoir si on interprête une fois à la génération ou à chaque exécutions. Quand à parse_ini_file() elle ne sait même pas gérer les listes. Ãa m'amuse d'ailleurs de voir que cette fonction ne sait même pas interprêter le contenu du php.ini en entier (puisque extension= .. est une liste éclatée) D'autant qu'on en aura besoin aussi pour les fonctions d'admin, qui nécessiteront les écritures intelligentes. Rassures toi je suis loin de vouloir jeter ta classe à la poubelle, au contraire. -- Eric