)


La phplib originale (http://phplib.sourceforge.net/) Avec son simple template.inc est classifiée comme étant "rapide" par tous les comparatifs. Et quand on regarde les sources (simples, courtes) on comprend un peu pourquoi (pas d'eval() ou autres fonctions horriblement lourdes)Sans-Nom a écrit:
?
La mise en cache?
le plus important c'est ça je dirais.
mon projet (XTF) n'a pas pour but de faire quelque chose d'extra ordinairement diffèrent de Smarty, mais juste de proposer quelque chose que je contrôle, donc la syntaxe est simple (et ce n'est pas le cas de celle de Smarty si j'ai bon souvenir)
D'extensible (je sais pas comment Smarty fonctionne, mais XTF peut facilement être étendu, vu que ça utilise une grammaire algébrique).
Ca c'est le côté langage XTF.
Maintenant je ne me fais pas d'illusion : parser un template dans de telles conditions peut prendre 200ms (sur un C2D E6400 & WinXP), et c'est là l'enjeu :
Mettre en cache le fichier parsé (ce que ne fait pas la phplib incluse avec phpbb) pour ne plus le reparser (donc passer de 200ms à 16ms dans mon cas)
Le but du jeu étant de faire cela de la meilleure façon (par exemple, j'optimise les if/else si possible, etc).
Alors pourquoi ne pas mettre simplement les pages de templates en cache avec PHP ?Sans-Nom a écrit:
La mise en cache?
le plus important c'est ça je dirais.
La syntaxe de PHP est simple aussi non ? a-t'on vraiment besoin d'autre chose que des variables et des boucles dans un moteur de templates ?mon projet (XTF) n'a pas pour but de faire quelque chose d'extra ordinairement diffèrent de Smarty, mais juste de proposer quelque chose que je contrôle, donc la syntaxe est simple (et ce n'est pas le cas de celle de Smarty si j'ai bon souvenir)
D'extensible (je sais pas comment Smarty fonctionne, mais XTF peut facilement être étendu, vu que ça utilise une grammaire algébrique).
Ca c'est le côté langage XTF.
La phplib originale (http://phplib.sourceforge.net/) Avec son simple template.inc est classifiée comme étant "rapide" par tous les comparatifs. Et quand on regarde les sources (simples, courtes) on comprend un peu pourquoi (pas d'eval() ou autres fonctions horriblement lourdes)
La mise en cache napporterait finalement pas grand chose (en fait, il vaut mieux utiliser une classe de mise en cache des parties de pages et entièrement personnalisées...)
Pour moi ça fait trois opérations :
)Alors pourquoi ne pas mettre simplement les pages de templates en cache avec PHP ?
Quand tu écris dans le langage du moteur (XTF pour moi), tu obtiens un truc en PHP qui fonctionnera, sans que tu n'ai à te soucier des détails.{$foreach a as b : c do}
{$when before do}Avant foreach si !empty(a)
{$when inner do}Pendant foreach si !empty(a)
{$when after do}Après foreach si !empty(a)
{$endforeach}D'accord, merciSans-Nom a écrit:
1. Sécurité du code : mon moteur de template est sécurisé (et probablement Smarty). Cela veut dire que si tu écris un template pour un forum phpbb (ou autre), le fait de prendre une modification d'un prestataire inconnu risque pas de compromettre ton site.
C'est bête, mais je crois que dans phplib justement, tu peux faire des choses sympa (tu peux en tout cas jouer sur les BEGIN xxx pour afficher des messages d'erreur)
2. Ne pas à se soucier de comment c'est écrit en PHP. Ce qui est un gros gros pointQuand tu écris dans le langage du moteur (XTF pour moi), tu obtiens un truc en PHP qui fonctionnera, sans que tu n'ai à te soucier des détails.
3. Faciliter les écritures. Exemple con pour XTF :
Code :{$foreach a as b : c do} {$when before do}Avant foreach si !empty(a) {$when inner do}Pendant foreach si !empty(a) {$when after do}Après foreach si !empty(a) {$endforeach}
Etc.

Non, phpBB n'uttilise pas la phplib originale ! (ils ont voulu la trafiquer et à l'image du reste de leur forum, ils ont sorti un truc pas terrible)Sans-Nom a écrit:
J'y ajoute d'autres problèmes, de sécurité.
Sinon un moteur de template correspond plus ou moins à l'utilisation du modèle vue contrôleur (MVC) et évite d'avoir un code crade qui fait 2 en 1 (ton code n'est pas sponsorisé par Jean Louis David)
Tu parles bien du bazar utilisé par phpbb? Qui fait donc un eval après avoir passé une petite soupe de regexp sur le fichier?Pour moi ça fait trois opérations :
1. récupération du fichier (php3 ? donc implode('', file()), et pas file_get_contents())
2. matraquage à coup de regexp, sans sécurité du code du template
3. évaluation du code du template avec php (c'est obligatoire si tu veux de bonnes perfs, car faire une machine virtuelle en php... bonjour)
http://phplib.cvs.sourceforge.net/phplib/p...inc?view=markup
Je n'ai pas vu de références à eval, donc je me trompe peut-être.
Par contre après lecture, oui. Y a pas de eval, mais des remplacements de chaîne.
Je suppose que tu veux dire écrire directement <?php echo $foo; ?> et ainsi de suite?
Il y a plusieurs raisons qui font que c'est stupide et lourd.
1. Sécurité du code : mon moteur de template est sécurisé (et probablement Smarty). Cela veut dire que si tu écris un template pour un forum phpbb (ou autre), le fait de prendre une modification d'un prestataire inconnu risque pas de compromettre ton site.
C'est bête, mais je crois que dans phplib justement, tu peux faire des choses sympa (tu peux en tout cas jouer sur les BEGIN xxx pour afficher des messages d'erreur)
2. Ne pas à se soucier de comment c'est écrit en PHP. Ce qui est un gros gros pointQuand tu écris dans le langage du moteur (XTF pour moi), tu obtiens un truc en PHP qui fonctionnera, sans que tu n'ai à te soucier des détails.
3. Faciliter les écritures. Exemple con pour XTF :
Code :{$foreach a as b : c do} {$when before do}Avant foreach si !empty(a) {$when inner do}Pendant foreach si !empty(a) {$when after do}Après foreach si !empty(a) {$endforeach}
Etc.

Donc bye eval() trop longuewww1 machine:
OS: FreeBSD 5.2.1-RELEASE
CPU: 2 x Intel® Xeon CPU 2.66GHz (2657.82-MHz 686-class CPU) with Hyperthreading
MEM: 1073217536 (1023 MB)
PHP 5.1.2 (cli)
PHP 4.4.1 (Web)
www2 machine:
OS: Linux version 2.6.14-gentoo-r5 Gentoo 3.4.3-r1, ssp-3.4.3-0, pie-8.7.7)
CPU: 2 x Dual Core AMD Opteron Processor 265 stepping 02 1808.357 MHz
MEM: 2060388k total
PHP 5.1.2 (cli)
PHP Version 4.4.0-pl1-gentoo (web)
dev machine:
OS: Linux version 2.6.15-gentoo-r1 Gentoo 3.3.5.20050130-r1, ssp-3.3.5.20050130-1, pie-8.7.7.1
CPU: Intel® Pentium® 4 CPU 2.00GHz stepping 04
MEM: 516384k total,
PHP 4.4.0-pl1-gentoo (cli)
PHP Version 4.4.0-pl1-gentoo (web)
The result are as follows:
www1 - CLI
Variable functions took 0.012186050415 seconds.
call_user_func took 0.0300550460815 seconds.
eval took 0.17235994339 seconds.
www1 - Web
Variable functions took 0.017616 seconds.
call_user_func took 0.034926 seconds.
eval took 0.149618 seconds
www2 - CLI
Variable functions took 0.0065491199493408 seconds.
call_user_func took 0.019452095031738 seconds.
eval took 0.10734891891479 seconds.
www2 - Web
Variable functions took 0.01565 seconds.
call_user_func took 0.02613 seconds.
eval took 0.132258 seconds.
dev - CLI
Variable functions took 0.025176 seconds.
call_user_func took 0.047402 seconds.
eval took 0.168196 seconds.
dev - Web
Variable functions took 0.025465 seconds.
call_user_func took 0.049713 seconds.
eval took 0.20154 seconds.
On www1 - CLI, eval is about 14 times slower than calling function by using variable.
On www1 - Web, eval is about 8.5 times slower (hmm interesting. Perhaps PHP4 is faster calculating eval than PHP5)
On www2 - CLI, eval is about 16 times slower than calling function by using variable.
On www2 - Web, eval is about 8.5 times slower (about same result as www1)
On dev - CLI, eval is about 6.6 times slower than calling function by using variable.
On dev - Web, eval is about 8 times slower (about same result as www1)
je te suggère de lire la doc de Bison/flex pour comprendre 
]
Sujets Similaires: 