Bonjour à tous,
Je reviens sur la balise #INCLURE pour mieux comprendre son fonctionnement.
Le doc de spip dit :
"Avec la nouvelle balise [(#INCLURE{fond=...})], l’inclusion est réalisée lors du calcul du squelette, et son résultat est stocké dans le cache de la page appelante. Avec ce système, on ne peut plus gérer une durée de vie ($delais ou #CACHE{}) réduite pour un squelette inclus"
Donc, une page inclue avec #INCLURE n'aurait pas besoin pas de balise #CACHE{} ?
Et si elle est bien stockée dans le cache, mais à quel moment est-elle renouvellée ?
Si quelqu'un peut m'éclairer, merci.
A+
Alain
Alors pour approfondir ses connaissances de spip, il y a une super série d'articles de Stanislas et al. sur spip-contrib.
Tu trouveras notamment dans celui sur les squelettes
( http://www.spip-contrib.net/Gerer-les-squelettes ) un lien vers un article de Francois Vachon qui explique bien les #INCLURE, en comparaison des <INCLURE()>.
BoOz
Alain HUSSON wrote:
Bonjour à tous,
Je reviens sur la balise #INCLURE pour mieux comprendre son fonctionnement.
Le doc de spip dit :
"Avec la nouvelle balise [(#INCLURE{fond=...})], l’inclusion est réalisée lors du calcul du squelette, et son résultat est stocké dans le cache de la page appelante. Avec ce système, on ne peut plus gérer une durée de vie ($delais ou #CACHE{}) réduite pour un squelette inclus"
Donc, une page inclue avec #INCLURE n'aurait pas besoin pas de balise #CACHE{} ?
Et si elle est bien stockée dans le cache, mais à quel moment est-elle renouvellée ?
Si quelqu'un peut m'éclairer, merci.
A+
Alain
Oui, merci beaucoup pour le lien.
J'avais déjà lu l'article de F.Vachon mais pas assez en profondeur.
Je vais approfondir les exemples donnés et examiner le cache pour comparer les résultats obtenus.
A+
Alain
BoOz a écrit :
Alors pour approfondir ses connaissances de spip, il y a une super série d'articles de Stanislas et al. sur spip-contrib.
Tu trouveras notamment dans celui sur les squelettes
( http://www.spip-contrib.net/Gerer-les-squelettes ) un lien vers un article de Francois Vachon qui explique bien les #INCLURE, en comparaison des <INCLURE()>.BoOz
Alain HUSSON wrote:
Bonjour à tous,
Je reviens sur la balise #INCLURE pour mieux comprendre son fonctionnement.
Le doc de spip dit :
"Avec la nouvelle balise [(#INCLURE{fond=...})], l’inclusion est réalisée lors du calcul du squelette, et son résultat est stocké dans le cache de la page appelante. Avec ce système, on ne peut plus gérer une durée de vie ($delais ou #CACHE{}) réduite pour un squelette inclus"
Donc, une page inclue avec #INCLURE n'aurait pas besoin pas de balise #CACHE{} ?
Et si elle est bien stockée dans le cache, mais à quel moment est-elle renouvellée ?
Si quelqu'un peut m'éclairer, merci.
A+
Alain
Alain HUSSON wrote:
Oui, merci beaucoup pour le lien.
J'avais déjà lu l'article de F.Vachon mais pas assez en profondeur.
Je vais approfondir les exemples donnés et examiner le cache pour
comparer les résultats obtenus.
A+
Alain
S'il y a certains points dans l'article qui restent obscur je serais heureux
de t'aider à les éclaircir. (http://monsitespip.com/spip.php?article29)
François
BoOz a écrit :
Alors pour approfondir ses connaissances de spip, il y a une super
série d'articles de Stanislas et al. sur spip-contrib.Tu trouveras notamment dans celui sur les squelettes
( http://www.spip-contrib.net/Gerer-les-squelettes ) un lien vers un
article de Francois Vachon qui explique bien les #INCLURE, en
comparaison des <INCLURE()>.BoOz
Alain HUSSON wrote:
Bonjour à tous,
Je reviens sur la balise #INCLURE pour mieux comprendre son
fonctionnement. Le doc de spip dit :
"Avec la nouvelle balise [(#INCLURE{fond=...})], l’inclusion est
réalisée lors du calcul du squelette, et son résultat est stocké
dans le cache de la page appelante. Avec ce système, on ne peut
plus gérer une durée de vie ($delais ou #CACHE{}) réduite pour un
squelette inclus"
Donc, une page inclue avec #INCLURE n'aurait pas besoin pas de
balise #CACHE{} ?
Et si elle est bien stockée dans le cache, mais à quel moment
est-elle renouvellée ?
Si quelqu'un peut m'éclairer, merci.
A+
Alain_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP
Salut,
> Oui, merci beaucoup pour le lien.
> J'avais déjà lu l'article de F.Vachon mais pas assez en profondeur.
> Je vais approfondir les exemples donnés et examiner le cache pour
> comparer les résultats obtenus.
> A+
> Alain
>S'il y a certains points dans l'article qui restent obscur je serais heureux
de t'aider à les éclaircir. (http://monsitespip.com/spip.php?article29)
Bon alors j'en profite : supposons qu'on ait un squelette article.html
qui fait appel à plusieurs sous-squelettes inclus, certains par #INCLURE
et d'autres par <INCLURE>. Supposons de plus que chacun de ces
squelettes dispose d'une balise #CACHE. Si j'ai bien tout compris :
- La version tout assemblée n'est jamais stockée dès qu'il y a au moins
un <INCLURE> dynamique, essentiellement il y reste des appels
équivalents aux <INCLURE> en question (c'est ce que tu expliques, fort
bien, dans ton article) ;
- Le #CACHE de chaque <INCLURE> est pris en compte à chaque chargement
de la page par un navigateur ;
- Le #CACHE des #INCLURE est ignoré complètement.
Me gourre-je ? En particulier ssur le dernier point, ce qui serait cool
serait que le #CACHE effectif soit le plus petit de tous les #CACHEs des
squelettes inclus de manière statique ...
Question subsidiaire : en cas de #CACHE{...,cache-client}, laquelle de
toutes ces valeurs est transmise au client ? En particulier, le cas qui
m'intéresse est #CACHE{0}.
Est-ce que ce genre de truc est écrit ailleurs qu'au fin fond du code de
SPIP ?
/v
--
Vincent Beffara
UMPA - ENS-Lyon
46 allée d'Italie
69364 Lyon Cedex 07
Tél : 04 72 72 85 25
Vincent Beffara wrote:
Salut,
Oui, merci beaucoup pour le lien.
J'avais déjà lu l'article de F.Vachon mais pas assez en profondeur.
Je vais approfondir les exemples donnés et examiner le cache pour
comparer les résultats obtenus.
A+
AlainS'il y a certains points dans l'article qui restent obscur je serais
heureux de t'aider à les éclaircir.
(http://monsitespip.com/spip.php?article29)Bon alors j'en profite : supposons qu'on ait un squelette article.html
qui fait appel à plusieurs sous-squelettes inclus, certains par
#INCLURE et d'autres par <INCLURE>. Supposons de plus que chacun de
ces squelettes dispose d'une balise #CACHE. Si j'ai bien tout compris
:- La version tout assemblée n'est jamais stockée dès qu'il y a au
moins un <INCLURE> dynamique, essentiellement il y reste des appels
équivalents aux <INCLURE> en question (c'est ce que tu expliques,
fort bien, dans ton article) ;
Faux! Je viens de faire le test.
Que tu mettes un <INCLURE> dynamique ou du php dans un #INCLURE statique,
c'est le résultat qui est mis en cache. Voir(http://monsitespip.com/spip.php?article29#forum335)
- Le #CACHE de chaque <INCLURE> est pris en compte à chaque chargement
de la page par un navigateur ;
Faux! Si tu as une page contenant des #INCLURE statiques, même si ces dernier contiennent plein d' <INCLURE> dynamique, #CACHE de chaque <INCLURE> ne sera pris en compte que le jour où ton squelette principale sera recalculé.
- Le #CACHE des #INCLURE est ignoré complètement.
En fait, ils n'en ont pas puisque c'est le résultat qui est enregistré dans le cache de du squelette les contenants.
Dans mon exemple, que tu écrives Article = 1 dans ton squelette ou que tu appelles un #INCLURE statique contenant même du php comme ici:
Dans un squelette j'ai mis
[(#INCLURE{fond=inc/inc_php}{id_rubrique})]
Dans inc_php.html j'ai mis
<BOUCLE_article(ARTICLES){0,1}{par hasard}>
<?php echo 'Article = ' ?> #ID_ARTICLE
</BOUCLE_article>
dans le cache du squelette principal, c'est "Article = 1" qui a été enregistré.
Même en appellant dans la boucle un <INCLURE> dynamique avec un #CACHE...
<BOUCLE_article(ARTICLES){0,1}{par hasard}>
<INCLURE{fond=inc/inc_php2}{id_rubrique}>
</BOUCLE_article>
Et inc_php2.html contient encore
<BOUCLE_article(ARTICLES){0,1}{par hasard}>
<?php echo 'Article = ' ?> #ID_ARTICLE
</BOUCLE_article>
dans le cache de la page principale, c'est encore le résultat qui est enregistré, du style "Article = 1".
Me gourre-je ? En particulier ssur le dernier point, ce qui serait
cool serait que le #CACHE effectif soit le plus petit de tous les
#CACHEs des squelettes inclus de manière statique ...Question subsidiaire : en cas de #CACHE{...,cache-client}, laquelle de
toutes ces valeurs est transmise au client ? En particulier, le cas
qui m'intéresse est #CACHE{0}.Est-ce que ce genre de truc est écrit ailleurs qu'au fin fond du code
de SPIP ?/v
François Vachon a écrit :
S'il y a certains points dans l'article qui restent obscur je serais heureux
de t'aider à les éclaircir. (http://monsitespip.com/spip.php?article29)
Salut François,
Ainsi que je l'ai signalé dans un message de forum,
le parapgraphe suivant à mon avis contient une erreur :
Alors que le temps d’appel pour une balise d’inclusion dynamique
augmente proportionnellement au nombre de fois qu’elle est appelée,
une balise d’inclusion dynamique augmente à peine
?
JL
François
BoOz a écrit :
Alors pour approfondir ses connaissances de spip, il y a une super
série d'articles de Stanislas et al. sur spip-contrib.Tu trouveras notamment dans celui sur les squelettes
( http://www.spip-contrib.net/Gerer-les-squelettes ) un lien vers un
article de Francois Vachon qui explique bien les #INCLURE, en
comparaison des <INCLURE()>.BoOz
Alain HUSSON wrote:
Bonjour à tous,
Je reviens sur la balise #INCLURE pour mieux comprendre son
fonctionnement. Le doc de spip dit :
"Avec la nouvelle balise [(#INCLURE{fond=...})], l’inclusion est
réalisée lors du calcul du squelette, et son résultat est stocké
dans le cache de la page appelante. Avec ce système, on ne peut
plus gérer une durée de vie ($delais ou #CACHE{}) réduite pour un
squelette inclus"
Donc, une page inclue avec #INCLURE n'aurait pas besoin pas de
balise #CACHE{} ?
Et si elle est bien stockée dans le cache, mais à quel moment
est-elle renouvellée ?
Si quelqu'un peut m'éclairer, merci.
A+
Alain_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP
François Vachon wrote:
Faux! Je viens de faire le test.
Que tu mettes un <INCLURE> dynamique ou du php dans un #INCLURE statique,
ais-je bien compris ?
à partir d'éléments simples (sans php inclu, ni INCLURE inclu dans un INCLURE...)
si j'ai :
squelette_appelant.html #CACHE{7200}
| partie_1
|_ #INCLURE #CACHE{3600}
| partie_2
|_ <INCLURE> #CACHE{0}
| partie_3
quand j'appelle ?page=squelette_appelant
ça charge :
la version cache de partie_1
la version cache de #INCLURE
la version cache de partie_2
la version calculée de <INCLURE>
la version cache de partie_3
après 3600 secondes :
la version cache de partie_1
la version cache de #INCLURE
la version cache de partie_2
la version calculée de <INCLURE>
la version cache de partie_3
après 7200 secondes :
la version calculée de partie_1
la version calculée de #INCLURE
la version calculée de partie_2
la version calculée de <INCLURE>
la version calculée de partie_3
c'est ça ?
François Vachon a écrit :
Vincent Beffara wrote:
Salut,
Oui, merci beaucoup pour le lien.
J'avais déjà lu l'article de F.Vachon mais pas assez en profondeur.
Je vais approfondir les exemples donnés et examiner le cache pour
comparer les résultats obtenus.
A+
AlainS'il y a certains points dans l'article qui restent obscur je serais
heureux de t'aider à les éclaircir.
(http://monsitespip.com/spip.php?article29)Bon alors j'en profite : supposons qu'on ait un squelette article.html
qui fait appel à plusieurs sous-squelettes inclus, certains par
#INCLURE et d'autres par <INCLURE>. Supposons de plus que chacun de
ces squelettes dispose d'une balise #CACHE. Si j'ai bien tout compris
:- La version tout assemblée n'est jamais stockée dès qu'il y a au
moins un <INCLURE> dynamique, essentiellement il y reste des appels
équivalents aux <INCLURE> en question (c'est ce que tu expliques,
fort bien, dans ton article) ;Faux!
heu, dans ce cas, on dit je ne pense pas et on tente d'expliquer concretement ce qui fait penser le contraire.
peux tu expliquer un peu pourquoi tu penses que c'est faux ?
Si tu te penches 5 mn sur le code d'un squelette compilé et sur le cache généré, tu devrais changer d'avis.
Voici un petit test tout simple qui permet de comprendre comment ca marche :
- inc-toto.html :
#CACHE{60}
date du cache : #DATE
<br/>date réelle : <?php echo date('d-m-Y H:i:s'); ?>
- toto.html :
#CACHE{3600}
date du cache : #DATE
<br/>date réelle : <?php echo date('d-m-Y H:i:s'); ?>
<hr/>inclusion statique :
[(#INCLURE{fond=inc-toto})]
<hr/>inclusion dynamique :
<INCLURE{fond=inc-toto}>
- premier appel :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41
inclusion statique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41
inclusion dynamique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41
=> tout est calculé
- deuxieme appel :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:24:06
inclusion statique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41
inclusion dynamique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:24:06
=> on est encore dans le delai de 60s, tout est pris en cache.
on remarque par contre que le php de l'inclusion dynamique n'est pas executé à chaque hit, c'est le resultat de l'eval qui est mis en cache (celui de toto.html) alors que le code php de toto.html et de l'inclusion dynamique sont eux executés à chaque hit
- Troisieme appel :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:24:48
inclusion statique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41
inclusion dynamique :
date du cache : 2008-03-06 16:24:48
date réelle : 06-03-2008 16:24:48
=> le delai de l'inclusion statique etant passé, le cache de l'inclusion dynamique est recalculée.
Voila, donc la seule chose pas tres claire dans la doc, c'est qu'une inclusion statique met en cache le résultat de l'eval du cache et non pas le cache lui meme (comme je le pensais)
sinon, c'est tout bon
@++
Merci pour ta réponse.
Mais :
- La version tout assemblée n'est jamais stockée dès qu'il y a au
moins un <INCLURE> dynamique, essentiellement il y reste des appels
équivalents aux <INCLURE> en question (c'est ce que tu expliques,
fort bien, dans ton article) ;Faux! Je viens de faire le test.
Que tu mettes un <INCLURE> dynamique ou du php dans un #INCLURE statique,
c'est le résultat qui est mis en cache.
Voir(http://monsitespip.com/spip.php?article29#forum335)
Ah, euh, j'oubliais une hypothèse dans mes questions, il n'y a pas de
<INCLURE> dans mes #INCLURE (ça n'a pas vraiment de sens, enfin
sémantiquement comme tu dis les deux sont équivalents puisque c'est le
résultat qui est stocké, donc autant rendre ça explicite et décider que
si un squelette est destiné à être #INCLUS on n'y utilise pas <INCLURE>
mais seulement #INCLURE).
- Le #CACHE de chaque <INCLURE> est pris en compte à chaque chargement
de la page par un navigateur ;Faux! Si tu as une page contenant des #INCLURE statiques, même si ces
dernier contiennent plein d' <INCLURE> dynamique, #CACHE de chaque
<INCLURE> ne sera pris en compte que le jour où ton squelette principale
sera recalculé.
OK, même remarque. La structure que j'ai en tête c'est
article.html
<INCLURE>
<INCLURE>
#INCLURE
<INCLURE>
#INCLURE
Dans ce cas, est-ce que c'est vrai que tous les #CACHE des <INCLURE>
sont regardés à chaque fois, et que toutes les directives #CACHE dans
les fichier #INCLUS sont ignorées ?
- Le #CACHE des #INCLURE est ignoré complètement.
En fait, ils n'en ont pas puisque c'est le résultat qui est enregistré dans
le cache de du squelette les contenants.
Ils n'en ont pas, si, moi je peux mettre des commandes #CACHE dedans, et
c'est ça que je veux dire par "leur #CACHE", désolé si ma formulation
n'était pas claire.
Dans ma tête (mais justement c'est pour ça que je demande), si on a un
squelette avec que des #INCLURE, la première fois qu'on l'appelle il est
entièrement calculé jusqu'à la version purement html, qui est renvoyée
au navigateur (bien sûr) et stockée telle quelle dans le cache.
Maintenant, dans le cache elle est sans doute accompagnée d'une
méta-donnée qui est sa date d'expiration (ou sa durée de vie).
Ma question est en fait, comment est calculée la date en question ? Je
vois deux stratégies possibles,
- celle donnée par la directive #CACHE du squelette principal,
- celle donnée par le plus petit des #CACHE présent dans tous les
fichiers utilisés lors du calcul - ce qui impliquerait que le moinde
#CACHE{0} dans un sous-sous-sous-squelette se propagerait à la page
entière.
D'après ce que tu dis, c'est la première réponse qui est la bonne ? La
seconde me semble plus intuitive ...
/v
--
Vincent Beffara
UMPA - ENS-Lyon
46 allée d'Italie
69364 Lyon Cedex 07
Tél : 04 72 72 85 25
Ah, ok, merci François, je viens de rentrer et je vois que mon post
a déclenché, entre temps, de nombreux échanges qui vont permettre de mieux comprendre les finesses de INCLURE. Merci pour les exemples de test. Je vais les essayer.
A+
Alain
François Vachon a écrit :
Alain HUSSON wrote:
Oui, merci beaucoup pour le lien.
J'avais déjà lu l'article de F.Vachon mais pas assez en profondeur.
Je vais approfondir les exemples donnés et examiner le cache pour
comparer les résultats obtenus.
A+
AlainS'il y a certains points dans l'article qui restent obscur je serais heureux
de t'aider à les éclaircir. (http://monsitespip.com/spip.php?article29)François
BoOz a écrit :
Alors pour approfondir ses connaissances de spip, il y a une super
série d'articles de Stanislas et al. sur spip-contrib.Tu trouveras notamment dans celui sur les squelettes
( http://www.spip-contrib.net/Gerer-les-squelettes ) un lien vers un
article de Francois Vachon qui explique bien les #INCLURE, en
comparaison des <INCLURE()>.BoOz
Alain HUSSON wrote:
Bonjour à tous,
Je reviens sur la balise #INCLURE pour mieux comprendre son
fonctionnement. Le doc de spip dit :
"Avec la nouvelle balise [(#INCLURE{fond=...})], l’inclusion est
réalisée lors du calcul du squelette, et son résultat est stocké
dans le cache de la page appelante. Avec ce système, on ne peut
plus gérer une durée de vie ($delais ou #CACHE{}) réduite pour un
squelette inclus"
Donc, une page inclue avec #INCLURE n'aurait pas besoin pas de
balise #CACHE{} ?
Et si elle est bien stockée dans le cache, mais à quel moment
est-elle renouvellée ?
Si quelqu'un peut m'éclairer, merci.
A+
Alain_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP
Donc, si j'ai bien compris, en référence à l'article de François,
pour un gain de temps de calcul et d'affichage,
en conservant une structure modulaire aux pages du squelette
à partir de ma page principale.html,
j'utilise prioritairement un #INCLURE (statique)
sauf si il y a des paramètres à passer
et dans ce cas j'utilise un <INCLURE> (dynamique)+ paramètres
j'ai juste ?
A+
Alain
Donc, si j'ai bien compris, en référence à l'article de François,
pour un gain de temps de calcul et d'affichage,
en conservant une structure modulaire aux pages du squelette
à partir de ma page principale.html,
j'utilise prioritairement un #INCLURE (statique)
sauf si il y a des paramètres à passer
et dans ce cas j'utilise un <INCLURE> (dynamique)+ paramètres
j'ai juste ?
(toujours si j'ai bien compris)
#INCLURE avec {param=valeur}
est toujours considéré comme différent si le paramètre a une valeur
différente, donc tu peux dire [(#INCLUDE{fond=resume}{id_article=...)]
sans risque.
Le problème se pose quand le rendu dépend non pas des paramètres passés
dans #INCLURE mais du contexte (cookie) ou de la base de donnée (donc
éviter #INCLURE{dernier-message-poste} qui risque de changer
constamment).
J'ai bon ?
/v
--
Vincent Beffara
UMPA - ENS-Lyon
46 allée d'Italie
69364 Lyon Cedex 07
Tél : 04 72 72 85 25
Stephane wrote:
François Vachon a écrit :
Vincent Beffara wrote:
Salut,
Oui, merci beaucoup pour le lien.
J'avais déjà lu l'article de F.Vachon mais pas assez en
profondeur. Je vais approfondir les exemples donnés et examiner
le cache pour comparer les résultats obtenus.
A+
AlainS'il y a certains points dans l'article qui restent obscur je
serais heureux de t'aider à les éclaircir.
(http://monsitespip.com/spip.php?article29)Bon alors j'en profite : supposons qu'on ait un squelette
article.html qui fait appel à plusieurs sous-squelettes inclus,
certains par #INCLURE et d'autres par <INCLURE>. Supposons de plus
que chacun de ces squelettes dispose d'une balise #CACHE. Si j'ai
bien tout compris- La version tout assemblée n'est jamais stockée dès qu'il y a au
moins un <INCLURE> dynamique, essentiellement il y reste des appels
équivalents aux <INCLURE> en question (c'est ce que tu expliques,
fort bien, dans ton article) ;Faux!
heu, dans ce cas, on dit je ne pense pas et on tente d'expliquer
concretement ce qui fait penser le contraire.
peux tu expliquer un peu pourquoi tu penses que c'est faux ?
Si tu te penches 5 mn sur le code d'un squelette compilé et sur le
cache généré, tu devrais changer d'avis.
5mm... oui, bon! ![]()
Ton test est bien, mais c'est pas ce que je disais il me semble.
Mais je n'ai probablement pas été assez explicite, désolé...
Tu as un squelette toto.html qui compare un #INCLURE statique et un <INCLURE> dynamique.
Alors là, ta démonstrations est bonne.
Mais je parlais pas de ça.
Je parle d'un squelette toto.html qui contiendrait un #INCLURE
Ici, je vérifie si de mettre du PHP dans ton inc-toto.html ou appeller dans ton inc-toto.html un inc-toto2.html
de en <INCLURE> dynamique change quelquechose...
Donc, pour parler tout les deux de la même chose,
il faut créer un autre fichier (disons toto1.html )
#CACHE{3600}
[(#INCLURE{fond=toto})]
Et là, tu verras que dans le fichier mise en cache pourla page toto1.html il y aura
a:10:{s:5:"texte";s:283:"
date du cache : 2008-03-06 11:29:57
<br/>date réelle : 06-03-2008 11:29 <hr/>inclusion statique :
date du cache : 2008-03-06 11:29:57
<br/>date réelle : 06-03-2008 11:29
<hr/>inclusion dynamique :
date du cache : 2008-03-06 11:29:57
<br/>date réelle : 06-03-2008 11:29
";s:9:"squelette";s:37:"html_d97fa32770d81f54cf6af7f99aa8c27f";s:11:"process_ins";s:4:"html";s:11:"invalideurs";a:1:{s:5:"cache";s:34:"d/svn-spip%3Fpage%3Dtoto1.9a5b8c85";}s:7:"entetes";a:1:{s:12:"X-Spip-Cache";s:4:"3600";}s:5:"duree";i:3600;s:8:"contexte";a:4:{s:4:"page";s:5:"toto1";s:4:"lang";s:2:"fr";s:10:"date_redac";s:19:"2008-03-06 11:29:57";s:4:"date";s:19:"2008-03-06 11:29:57";}s:17:"insert_js_fichier";a:0:{}s:16:"insert_js_inline";a:0:{}s:2:"gz";b:0;}
Et là rien ne changera avant 3600 secondes dans ce fichier mis en cache.
Et comme tu peux le voir, même si nous utilisons tes fichiers test, c'est bien le résultat qui est mis en cache dans ce fichier.
Évidemment chaque squelette a tout de même généré son propre fichier en cache mais, ici, dans mon exemple, ils ne serviront pas avant le délais de la page principale.
Mais c'est en échangeant qu'on va peut-être éclaircir la question!
François
Voici un petit test tout simple qui permet de comprendre comment ca
marche :- inc-toto.html :
#CACHE{60}
date du cache : #DATE
<br/>date réelle : <?php echo date('d-m-Y H:i:s'); ?>- toto.html :
#CACHE{3600}
date du cache : #DATE
<br/>date réelle : <?php echo date('d-m-Y H:i:s'); ?>
<hr/>inclusion statique :
[(#INCLURE{fond=inc-toto})]
<hr/>inclusion dynamique :
<INCLURE{fond=inc-toto}>- premier appel :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41inclusion statique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41inclusion dynamique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41
=> tout est calculé- deuxieme appel :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:24:06inclusion statique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41inclusion dynamique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:24:06
=> on est encore dans le delai de 60s, tout est pris en cache.
on remarque par contre que le php de l'inclusion dynamique n'est pas
executé à chaque hit, c'est le resultat de l'eval qui est mis en cache
(celui de toto.html) alors que le code php de toto.html et de
l'inclusion dynamique sont eux executés à chaque hit- Troisieme appel :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:24:48inclusion statique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41inclusion dynamique :
date du cache : 2008-03-06 16:24:48
date réelle : 06-03-2008 16:24:48
=> le delai de l'inclusion statique etant passé, le cache de
l'inclusion dynamique est recalculée.Voila, donc la seule chose pas tres claire dans la doc, c'est qu'une
inclusion statique met en cache le résultat de l'eval du cache et non
pas le cache lui meme (comme je le pensais)
sinon, c'est tout bon@++
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP
Stephane wrote:
François Vachon a écrit :
Vincent Beffara wrote:
Salut,
Oui, merci beaucoup pour le lien.
J'avais déjà lu l'article de F.Vachon mais pas assez en
profondeur. Je vais approfondir les exemples donnés et examiner
le cache pour comparer les résultats obtenus.
A+
AlainS'il y a certains points dans l'article qui restent obscur je
serais heureux de t'aider à les éclaircir.
(http://monsitespip.com/spip.php?article29)Bon alors j'en profite : supposons qu'on ait un squelette
article.html qui fait appel à plusieurs sous-squelettes inclus,
certains par #INCLURE et d'autres par <INCLURE>. Supposons de plus
que chacun de ces squelettes dispose d'une balise #CACHE. Si j'ai
bien tout compris- La version tout assemblée n'est jamais stockée dès qu'il y a au
moins un <INCLURE> dynamique, essentiellement il y reste des appels
équivalents aux <INCLURE> en question (c'est ce que tu expliques,
fort bien, dans ton article) ;Faux!
heu, dans ce cas, on dit je ne pense pas et on tente d'expliquer
concretement ce qui fait penser le contraire.
peux tu expliquer un peu pourquoi tu penses que c'est faux ?
Si tu te penches 5 mn sur le code d'un squelette compilé et sur le
cache généré, tu devrais changer d'avis.Voici un petit test tout simple qui permet de comprendre comment ca
marche :- inc-toto.html :
#CACHE{60}
date du cache : #DATE
<br/>date réelle : <?php echo date('d-m-Y H:i:s'); ?>- toto.html :
#CACHE{3600}
date du cache : #DATE
<br/>date réelle : <?php echo date('d-m-Y H:i:s'); ?>
<hr/>inclusion statique :
[(#INCLURE{fond=inc-toto})]
<hr/>inclusion dynamique :
<INCLURE{fond=inc-toto}>- premier appel :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41inclusion statique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41inclusion dynamique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41
=> tout est calculé- deuxieme appel :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:24:06inclusion statique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41inclusion dynamique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:24:06
=> on est encore dans le delai de 60s, tout est pris en cache.
on remarque par contre que le php de l'inclusion dynamique n'est pas
executé à chaque hit, c'est le resultat de l'eval qui est mis en cache
(celui de toto.html) alors que le code php de toto.html et de
l'inclusion dynamique sont eux executés à chaque hit- Troisieme appel :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:24:48inclusion statique :
date du cache : 2008-03-06 16:23:41
date réelle : 06-03-2008 16:23:41inclusion dynamique :
date du cache : 2008-03-06 16:24:48
date réelle : 06-03-2008 16:24:48
=> le delai de l'inclusion statique etant passé, le cache de
l'inclusion dynamique est recalculée.Voila, donc la seule chose pas tres claire dans la doc, c'est qu'une
inclusion statique met en cache le résultat de l'eval du cache et non
pas le cache lui meme (comme je le pensais)
sinon, c'est tout bon@++
Ton exemple compare l'appel d'un <INCLURE> dynamique vs un #INCLURE statique.
Moi je parle de vérifier ce qui est mis en cache si on place des <INCLURE> dynamique dans des #INCLURE statique!
J'ai donc pris tes fichiers comme nouveau point de départ.
J'ai créé un fichier toto1.html
- toto.html :
#CACHE{3600}
[(#INCLURE{fond=toto1})]
Et là, rien ne sera recalculé avant 3600 secondes.
Je n'ai probablement pas été assez explicite.
Mea culpa! ![]()
François
François Vachon a écrit :
Stephane wrote:
Ton exemple compare l'appel d'un <INCLURE> dynamique vs un #INCLURE statique.
Moi je parle de vérifier ce qui est mis en cache si on place des <INCLURE> dynamique dans des #INCLURE statique!
oups, sorry, j'avais compris de travers, je croyais que c'était la différence entre les 2 comme expliqué dans la doc dont tu parlais.
J'ai donc pris tes fichiers comme nouveau point de départ.
J'ai créé un fichier toto1.html- toto.html :
#CACHE{3600}
[(#INCLURE{fond=toto1})]Et là, rien ne sera recalculé avant 3600 secondes.
oui bien sur, #INCLURE va vraiment appeler toute la mecanique au moment du calcul du cache le contenant et stocker le résultat directement dans le fameux cache.
Cela implique que le code PHP est interprété et que c'est le resultat de cette execution qui est stocké.
En ca d'ailleurs, #INCLURE et <INCLURE> sont vraiment différents fonctionnellement (alors que la fréquence de calcul et les perf ne sont que des différences techniques).
En fait, c'est assez simple à comprendre :
- <INCLURE> va produire dans le code du squelette compilé (qui est le code executer pour generer le fichier de cache):
'<?php
$contexte_inclus = array(\'fond\' => ' .
argumenter_squelette('inc-toto') . ',
\'lang\' => ' . argumenter_squelette($GLOBALS["spip_lang"]) . ');include(_DIR_RESTREINT . "public.php");?'.'>'
c'est donc du code PHP qui sera intégré dans le cache généré (qui sera donc un cache de type php), celui-ci etant interprété à chaque hit.
- #INCLURE va lui produire :
recuperer_fond('',array('fond' => 'inc-toto' ,'lang' => $GLOBALS["spip_lang"] ))
donc à chaque fois sera inclus dans le fichier de cache généré le code HTML equivalent à celui obtenu par en faisant ?page=inc-toto
Bref, que ca soit du code PHP dans le squelette ou dans le cache produit (<INCLURE>), celui ci sera executé et le resultat (HTML) intégré au fichier de cache généré quand on utilise #INCLURE.
Mais il n'est pas necessaire de comprendre tout ca pour bien l'utiliser : utilisez toujours #INCLURE sauf si vous avez une très bonne raison
La seule bonne raison à priori, c'est quand on a une durée de mise en cache beaucoup plus longue avec des calculs vraiment lourds dans l'inclusion.
Mais meme dans ce cas, il faut se poser la question du gain car l'assemblage des fichiers et leur évaluation (si ils contiennent du PHP) sont fait à chaque hit.
Si il y a un peu de trafic, c'est rapidement plus interessant de faire le gros calcul plus souvent (meme si c'est toute les 3mn) que de faire un peu plus d'accès disque et de calculs à chaque hit
Mes 2 sous
JLuc <jluc@no-log.org> a écrit :
François Vachon a écrit :
S'il y a certains points dans l'article qui restent obscur je serais heureux
de t'aider à les éclaircir. (http://monsitespip.com/spip.php?article29)Salut François,
Ainsi que je l'ai signalé dans un message de forum,
le parapgraphe suivant à mon avis contient une erreur :Alors que le temps d’appel pour une balise d’inclusion dynamique
augmente proportionnellement au nombre de fois qu’elle est appelée,
une balise d’inclusion dynamique augmente à peine?
JL
Je ne comprends pas ce que tu veux dire par "une erreur".
Si tu compares le temps de calcul que prend la page
http://monsitespip.com/spip.php?page=test_mod_inc_2&nbr=100
VS
http://monsitespip.com/spip.php?page=test_mod_inc_4&nbr=100
On voit que si on appelle un fichier 100 fois par INCLURE dynamique,
ça prend en moyenne 1 seconde.
Alors que si on appelle le même fichier 100 par INCLURE statique,
ça prend en moyenne 0.00024 seconde.
J'ai raté quelque chose?
François
François
BoOz a écrit :
Alors pour approfondir ses connaissances de spip, il y a une super
série d'articles de Stanislas et al. sur spip-contrib.Tu trouveras notamment dans celui sur les squelettes
( http://www.spip-contrib.net/Gerer-les-squelettes ) un lien vers un
article de Francois Vachon qui explique bien les #INCLURE, en
comparaison des <INCLURE()>.BoOz
Alain HUSSON wrote:
Bonjour à tous,
Je reviens sur la balise #INCLURE pour mieux comprendre son
fonctionnement. Le doc de spip dit :
"Avec la nouvelle balise [(#INCLURE{fond=...})], l’inclusion est
réalisée lors du calcul du squelette, et son résultat est stocké
dans le cache de la page appelante. Avec ce système, on ne peut
plus gérer une durée de vie ($delais ou #CACHE{}) réduite pour un
squelette inclus"
Donc, une page inclue avec #INCLURE n'aurait pas besoin pas de
balise #CACHE{} ?
Et si elle est bien stockée dans le cache, mais à quel moment
est-elle renouvellée ?
Si quelqu'un peut m'éclairer, merci.
A+
Alain_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP
francois.vachon@iago.ca a écrit :
JLuc <jluc@no-log.org> a écrit :
François Vachon a écrit :
S'il y a certains points dans l'article qui restent obscur je serais heureux
de t'aider à les éclaircir. (http://monsitespip.com/spip.php?article29)Salut François,
Ainsi que je l'ai signalé dans un message de forum,
le parapgraphe suivant à mon avis contient une erreur :Alors que le temps d’appel pour une balise d’inclusion dynamique
augmente proportionnellement au nombre de fois qu’elle est appelée,
une balise d’inclusion dynamique augmente à peine?
JLJe ne comprends pas ce que tu veux dire par "une erreur".
Alors que le temps d’appel pour une balise d’inclusion dynamique
augmente proportionnellement au nombre de fois qu’elle est appelée,
une balise d’inclusion *statique* augmente à peine
Stephane a écrit :
Mais il n'est pas nécessaire de comprendre tout ca pour bien l'utiliser
: utilisez toujours #INCLURE sauf si vous avez une très bonne raisonLa seule bonne raison à priori, c'est quand on a une durée de mise en cache beaucoup plus longue avec des calculs vraiment lourds dans l'inclusion.
en fait il y a aussi l'utilisation de #SESSION qu'on peut vouloir cantonner à un <INCLURE> (de mémoire quand #SESSION est détecté dans un #INCLURE, c'est l'incluant qui du coup génère un cache par utilisateur)
et puis si on veut utiliser un script perso : <INCLURE(bloc_perso.php){...}>
Mais bon, il faut reconnaitre que le grand dogme du squelette sans php en prend un coup : #INCLURE permet d'exploiter le cache sur n'importe quel script, même pas besoin de faire des filtres si ce n'est pour bien ranger le code.
Alain HUSSON a écrit :
Ah, ok, merci François, je viens de rentrer et je vois que mon post a déclenché, entre temps, de nombreux échanges qui vont permettre de mieux comprendre les finesses de INCLURE. Merci pour les exemples de test. Je vais les essayer. A+ Alain François Vachon a écrit :Alain HUSSON wrote:Oui, merci beaucoup pour le lien. J'avais déjà lu l'article de F.Vachon mais pas assez en profondeur. Je vais approfondir les exemples donnés et examiner le cache pour comparer les résultats obtenus. A+ AlainS'il y a certains points dans l'article qui restent obscur je serais heureux de t'aider à les éclaircir. () FrançoisBoOz a écrit :Alors pour approfondir ses connaissances de spip, il y a une super série d'articles de Stanislas et al. sur spip-contrib. Tu trouveras notamment dans celui sur les squelettes ( ) un lien vers un article de Francois Vachon qui explique bien les #INCLURE, en comparaison des <INCLURE()>. BoOz Alain HUSSON wrote:Bonjour à tous, Je reviens sur la balise #INCLURE pour mieux comprendre son fonctionnement. Le doc de spip dit : "Avec la nouvelle balise [(#INCLURE{fond=...})], l’inclusion est réalisée lors du calcul du squelette, et son résultat est stocké dans le cache de la page appelante. Avec ce système, on ne peut plus gérer une durée de vie ($delais ou #CACHE{}) réduite pour un squelette inclus" Donc, une page inclue avec #INCLURE n'aurait pas besoin pas de balise #CACHE{} ? Et si elle est bien stockée dans le cache, mais à quel moment est-elle renouvellée ? Si quelqu'un peut m'éclairer, merci. A+ Alain_______________________________________________ liste spip - désabonnement : Infos et archives : Documentation de SPIP : irc://irc.freenode.net/spip FAQ :_______________________________________________ liste spip - désabonnement : Infos et archives : Documentation de SPIP : irc://irc.freenode.net/spip FAQ :
Bonjour,
Toute cette discussion est très intéressante, et faut s’accrocher un minimum pour suivre.
L’étape suivante serait de rédiger un article (à mettre sur spip contrib ?) permettant de faire la synthèse de vos échanges, conclusions, les exemples, ce qui se passe, ce qui est en cache, combien de temps…
Je m’y collerai bien, mais j’ai pas encore votre niveau, et bien que j’essaye de comprendre j’ai pas encore saisi toute la finesse du truc. (je vois l’intéret évident, mais c’est la mécanique que j’ai pas encore bien percuté)
Mais en clarifiant les choses avec cet article, je pense que ça aiderait pas mal de personnes, afin d’optimiser leurs squelettes.
Qu 'en penseze vous ? Partants ?