cocoon-users-fr mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Frédéric Glorieux <frederic.glori...@ajlsm.com>
Subject Re: Conseil pour parametres pour XSL
Date Wed, 26 Apr 2006 07:45:27 GMT
 > (le 1er conseil de perf en XSL
 > semble etre d'eviter les variables...)

A ma connaissance, le nombre de variables pose peu de problèmes en XSL, 
du moins beaucoup moins que par exemple des templates récursifs mal 
pensés, d'autant plus que l'algorythme de cache de cocoon est ici 
puissant, il sait conserver tous les états différents d'une 
transformation selon chaque valeurs que peuvent prendre des paramètres.

Evidemment, cela dépends des valeurs passées, s'il s'agit par exemple du 
nom de la personne connectée, différent pour chacun, cela n'aurait pour 
effet que de multiplier les versions conservées.

 > Mon idee aujourd'hui est d'ajouter ceci dans ma XSL :
 > <cinclude:include src="cocoon://stylesheets/header"/>

Pour faire une xsl dynamique ? Alors là il faut oublier toute 
possibilité de cache.

Par contre il est possible de mettre en générateur d'entrée à cette 
transformation un <map:aggregate> qui donne le matériel nécessaire à 
transformer. L'algorythme de cache fonctionne sans problème à cet 
endroit, du moins, cocoon détermine selon les URIs en entrée ce qui peut 
être cacheable pour la suite. cinclude ou xinclude peuvent désormais 
fonctionner aussi de même, cependant, il est parfois plus difficile 
d'avoir une vue claire des tuyaux à l'oeuvre, puisque à l'intérieur 
d'une xsl ou d'un générateur xml, contrairement à un aggregate dans un 
sitemap.

Pour régler ce genre de problème, j'adopte généralement la logique suivante.

Poursuivre le plus longtemps possible des tuyaux droits sur du statique, 
rendus cacheable, par exemple, une transformation complexe de 
présentation sur une source xml est générée dans son tuyau, de manière à 
conserver un état xhtml cacheable qui est par la suite aggrégée.

J'isole les morceaux dynamiques dans des tuyaux à part, sachant 
qu'aucune cache ne peut être attendue.

Enfin, l'assemblage final est effectué avec une seule xsl sur un 
map:aggregate, sachant qu'à cet endroit aucune cache n'est à attendre, 
cette transformation s'occupe par exemple d'aller réécrire des liens 
selon le contexte. Il en résulte quelque chose de ce genre

<!-- Attrape tout ce qui est demandé en .html -->
<map:match type="regexp" pattern="(.*/)?(.*)\.html">
   <map:aggregate element="aggregate">
     <!-- un template de page statique -->
     <map:part src="cocoon:/theme/modele.xhtml" element="modele"/>
     <!-- la part cacheable du contenu présenté, qui réponds à une url 
de convenance .xhtml -->
     <map:part src="cocoon:/{1}{2}.xhtml" element="contenu"/>
     <!-- une barre de côté personnalisée avec nom, prénom, paramètre 
etc -->
     <map:part src="cocoon:/{1}menu.xhtml" element="menu"/>
   </map:aggregate>
   <!-- la transformation d'assemblage, avec différentes infos de 
contexte utiles -->
   <map:transform src="transform/presentation/presentation.xsl">
     <map:parameter name="home" value="{baselink:SitemapBaseLink}"/>
     <!-- liens pour css et images -->
     <map:parameter name="theme" value="{baselink:SitemapBaseLink}theme/"/>
   </map:transform>
   <!-- langue de l'utilisateur pour les messages i18n -->
   <map:act type="locale">
     <map:transform type="i18n">
       <map:parameter name="locale" value="{locale}"/>
     </map:transform>
   </map:act>
   <map:serialize type="xhtml"/>
</map:match>


En souhaitant que ces habitudes puissent donner des pistes.

-- 
Frédéric Glorieux (AJLSM, http://ajlsm.com)

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Mime
View raw message