ACTUALIZACIÓN 17.Jul.2013:
XALAN 2.7
no almacena en cachédocument()
llamadas dentro de una petición. Por lo tanto, es crucial almacenar cada documento necesario en una variable en el XSL.Documento XSLT(): ¿Es más lento cuando lo llamas varias veces?
He buscado durante bastante tiempo y no encontrar respuestas concretas a mi simple pregunta:
¿Qué método es más rápido o el compilador es suficientemente "inteligentes" de modo que ambas variantes son los mismos ?
Nota: Estoy usando Xalan (aplicación por defecto en el JDK 1.6) 2.7:
1) Tengo que leer una propiedad en un XML externo:
<xsl:value-of select="document($path)/person/address/city"/>
Siempre que necesito la ciudad, utilizo la expresión anterior (digamos 100 veces)
2) En lugar de llamar al documento() 100 veces, almaceno el nodo XML en una variable:
<xsl:variable name="node" select="document($path)"/>
Y entonces yo uso 100 veces
<xsl:value-of select="$node/person/address/city"/>
es más rápido, mejor, para lo cual razones Cuál? ¡Gracias!
También estoy interesado en una respuesta experta, pero, como creo, el caso con llamadas múltiples de 'document (path_to_doc)' depende de la realización del almacenamiento en caché xslt, en el caso, cuando el nodo document almacenado en la variable debe cargarse una vez en cualquier caso. –
Sí, también creo que ** depende de la implementación ** del procesador, pero me llama la atención cómo ** Xalan 2.7 (procesador predeterminado en JDK 1.6) ** lo hace. – basZero
No soy 100% positivo, pero creo que Xalan no almacena en caché los resultados de 'document()', pero xsltproc sí lo hace. Sin embargo, el argumento 'document()' se interpreta como un URI ([ver especificación] (http://www.w3.org/TR/xslt#add-func)), por lo que un almacenamiento en caché agresivo tendría mucho sentido. –