2009-01-12 10 views
25

Tengo un XSLT para ver archivos XML en el navegador. El XSLT es ingenuamente escrito y actualmente tarda mucho tiempo en ejecutarse (varios minutos).¿Cómo perfilo y optimizo un XSLT?

Mi archivo XML es de tamaño modesto (~ 1 MiB), y otros XSLT para el mismo documento que lo hacen diferente de procesamiento de ejecutar mucho más rápido. Así que sé que no es el tamaño del XML el problema, es mi XSLT.

¿Cómo hago para perfilar y optimizar mi XSLT?

(¿Es una mala idea de estar haciendo XSLT complejas en el navegador? ¿Debo lugar aplicar el lado de la aplicación XSLT?)

+0

SI proporciona el código XSLT y el documento XML en el que observa el problema, yo y otras personas podrían intentar ayudar. –

+0

Nota: la creación de perfiles XSLT y la depuración (mejor) se han agregado a Visual Studio 2010.Por supuesto, esto sigue siendo XSLT 1.0. – Abel

Respuesta

26

qué motor XSLT está usando? Si está utilizando el motor .NET y Visual Studio, puede usar el XSLT profiler integrado en Visual Studio, que es muy útil.

Otros excelentes herramientas de perfilado son XML Spy de Altova y Oxygen.

Si desea publicar su XSLT que sería más fácil de decir que siempre que sea posible cuellos de botella. En general, tenga cuidado con las expresiones XPath como '//', anterior :: * y following :: *. Algunos más normas y mejores prácticas:

  1. Evitar el uso repetido de "//item".
  2. No evalúe el mismo conjunto de nodos más de una vez; guárdalo en una variable.
  3. Evite <xsl:number> si puede. Por ejemplo, al usar position().
  4. Use <xsl:key>, por ejemplo, para resolver problemas de agrupación.
  5. Evite patrones complejos en reglas de plantilla. En su lugar, use dentro de la regla.
  6. tener cuidado al usar los preceding[-sibling] o following[-sibling] ejes. Esto a menudo indica un algoritmo con n-cuadrado rendimiento.
  7. No ordene el mismo conjunto de nodos más de una vez. Si es necesario, guardarlo como un fragmento árbol de resultados y el acceso utilizando la función de extensión node-set() .
  8. A la salida el valor de texto de un simple elemento #PCDATA, utilice <xsl:value-of> con preferencia a <xsl:apply-templates>.

(desde http://www.dpawson.co.uk/xsl/sect4/N9883.html#d15756e150)

Siguiendo estas reglas normalmente se traducirá en XSLT muy eficiente y que posiblemente no tendrán que utilizar un generador de perfiles en absoluto.

Acerca de su pregunta sobre XSLT en el navegador: No lo recomendaría porque primero no es independiente de la plataforma (no todos los navegadores pueden soportarlo o algunos navegadores solo lo admiten con un motor de bajo rendimiento) y segundo puede no controlas el motor usado

+0

Me estoy ejecutando en el navegador, por lo que mi motor XSLT es lo que usan Firefox, IE y Safari. Entiendo que cada motor se comportará de manera diferente con el mismo XSLT, por lo que crear un perfil de un motor en particular puede no reflejar todos 3. – pauldoo

+0

Coloque el XSLT problemático y puedo ayudarlo a encontrar las líneas problemáticas. –

+0

Como divo dice: "Publica el XSLT problemático y puedo ayudarte a encontrar las líneas problemáticas" :) –

2

El editor de Oxygen XML comercial tiene una característica para los archivos de perfiles y depuración de XSLT. Es un buen editor XML, también.

1

Me gusta usar Altova's XMLSpy para máquinas basadas en Windows. También tiene un perfilador incorporado. Puede check out a video on using the editor. (Escanee a 5:45 para obtener más información sobre el generador de perfiles). Es un producto comercial ... con un período de prueba de tiempo :)

18

Si proporciona el código XSLT y el documento XML donde observa el problema, yo y otras personas podríamos intentar ayudar.

Éstos son algunos de XSLT usage and performance tipsMichael Kay:

Ocho consejos para el uso eficiente de XSLT:

  1. Mantenga los documentos fuente pequeña. Si es necesario, divida el documento primero.
  2. Mantener el procesador XSLT (y Java VM) cargado en la memoria entre ejecuciones
  3. Si usa la misma hoja de estilo varias veces, compílela primero.
  4. Si utiliza el mismo documento fuente repetidamente, guárdelo en la memoria.
  5. Si realiza la misma transformación repetidamente, no lo haga. Almacenar el resultado en su lugar.
  6. Mantenga el documento de salida pequeño. Por ejemplo, si está generando HTML, use CSS.
  7. Nunca valide el mismo documento fuente más de una vez.
  8. Divide las transformaciones complejas en varias etapas.

Ocho consejos sobre cómo escribir eficiente X SLT:

  1. Evitar el uso repetido de "//item".
  2. No evalúe el mismo conjunto de nodos más de una vez; guárdalo en una variable.
  3. Evite <xsl:number> si puede. Por ejemplo, usando position().
  4. Use <xsl:key>, por ejemplo, para resolver problemas de agrupación.
  5. Evite patrones complejos en reglas de plantilla. En su lugar, use <xsl:choose> dentro de la regla.
  6. Tenga cuidado al usar los ejes preceding[-sibling] o following[-sibling] . Esto a menudo indica un algoritmo con n -rendimiento cuadrado.
  7. No ordene el mismo conjunto de nodos más de una vez. Si es necesario, guárdelo como un fragmento de árbol de resultados y acceda a él utilizando la función de extensión node-set().
  8. Para generar el valor de texto de un elemento simple #PCDATA, use <xsl:value-of> con preferencia a <xsl:apply-templates>.
+0

+1 para consejos XSLT. –