Comparación de las Tecnologías Java para XML

La p�gina anterior nos ofreci� una introducci�n al API Java para Procesar XML (JAXP), y las tecnolog�as que directa o indirectamente proporcionan al desarrollador Java las tecnolog�as para poder procesar documentos XML. Ilustr� el uso de los diferentes APIs con algunos programas de ejemplo. Esta segunda p�gina se centra en el rendimiento relativo de estos APIs obtenidos ejecutando los programas de ejemplo presentados en la primera p�gina. Este tutorial concluye con una tecera p�gina en que ofreceremos trucos para mejorar el rendimiento de las aplicaciones basadas en XML desde un punto de vista program�tico y arquitectural.

El prop�sito de las pruebas presentadas en esta p�gina es principalmente ilustrar el rendimiento respectivo de las diferentes t�cnicas de procesamiento XML: SAX, DOM, XSLT, y el impacto de la valicaci�n contra un DTD o contra un Esquema XML. Tambi�n se comparan los rendimientos de las diferentes implementaciones del API: Xerces, Crimson, Xalan, Saxon, XSLTC, etc. cuando se ejecutan en diferentes entornos de ejecuci�n Java JDK 1.2 y JDK 1.3 . Los resultados presentados aqu� no pretenden cubrir todas las implementaciones del API disponibles hoy en d�a sino subrayar que la diferencia entre la facilidad de uso y el rendimiento de los modelos de procesamiento elegidos puede evitarse mediante la implementaci�n de un analizador, un constructor de documento o un motor de hoja de estilo subyacentes.

.�Metodolog�a

Los programas de ejemplo presentados en la p�gina anterior demostraban el uso de los diferentes APIs disponibles. Para poder ser comparados, los hemos aplicado para resolver el mismo problema, y proporcionar id�ntica soluci�n. El problema se mantuvo simple para acomodar las diferentes capacidades de estas tecnologias y por lo tanto podr�a no tener la riqueza y potencia relevantes de otros m�s sofisticados como XSLT y XPath. En este respecto, las pruebas de rendimiento presentadas como micro-comparaciones.

Los programas de ejemplo estaban basados en los diferentes APIs para procesamiento de XML,

  • SAX, Simple API for XML
  • DOM, Document Object Model API from W3C
  • XSLT, XML Style Sheet Language Transformations from W3C
  • XPath, XML Path Language from W3C
  • JDOM, "Java optimized" document object model API from jdom.org

aplicados al mismo conjunto de documentos para proporcioar exactamente la misma salida. Los documentos XML procesados usando estas t�cnicas diferentes est�n conforme a la misma Document Type Definition o XML Schema. Estos esquemas especifican la representaci�n de un conjunto de configuraciones de tableros de ajedrez:

Ilustraci�n 2.1: Una Configuraci�n de Tablero de Ajedrez.

En los esquemas, el n�mero de configuraciones de tableros es ilimitado, permitiendo que se defina cualquier n�mero de configuraciones dentro de un s�lo documento. Para poder medir el rendimiento de los diferentes programas de ejemplo, se han creado documentos con 10, 100, 200, 300, 400, 500, 1000, 2000, 3000, 4000 y 5000 configuraciones de tableros de ajedrez.

Los documentos XML conformes al Chessboards.dtd y al esquema Chessboards.xsd tienen id�ntica estructura y contenido, la �nica excepci�n es reemplazar la Declaraci�n de Tipo de Documento por una referencia al Esquema XML. Para la prueba que implica a los esquemas XML, s�lo se us� un documento con 100 configuraciones de tableros de ajedrez.

C�digo de ejemplo 1: Un documento XML conforme a la DTD (Chessboards-[10-5000].xml)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE CHESSBOARDS SYSTEM "dtd/Chessboards.dtd">

<CHESSBOARDS>
 <CHESSBOARD>
  <WHITEPIECES>
   <KING><POSITION COLUMN="G" ROW="1" /></KING>
   <BISHOP><POSITION COLUMN="D" ROW="6" /></BISHOP>
   <ROOK><POSITION COLUMN="E" ROW="1" /></ROOK>
   <PAWN><POSITION COLUMN="A" ROW="4" /></PAWN>
   <PAWN><POSITION COLUMN="B" ROW="3" /></PAWN>
   <PAWN><POSITION COLUMN="C" ROW="2" /></PAWN>
   <PAWN><POSITION COLUMN="F" ROW="2" /></PAWN>
   <PAWN><POSITION COLUMN="G" ROW="2" /></PAWN>
   <PAWN><POSITION COLUMN="H" ROW="5" /></PAWN>
  </WHITEPIECES>
  <BLACKPIECES>
   <KING><POSITION COLUMN="B" ROW="6" /></KING>
   <QUEEN><POSITION COLUMN="A" ROW="7" /></QUEEN>
   <PAWN><POSITION COLUMN="A" ROW="5" /></PAWN>
   <PAWN><POSITION COLUMN="D" ROW="4" /></PAWN>
  </BLACKPIECES>
 </CHESSBOARD>
 <CHESSBOARD>
  ...
 </CHESSBOARD>
</CHESSBOARDS>

Las diferentes implementaciones basadas en SAX, DOM, XSLT, XPath, etc, cuando se aplican sobre los mismos documentos de entrada, proporcionan la misma salida: una representaci�n en formato de texto de una configuraci�n de tablero de ajedrez.

C�digo de Ejemplo 2: Una representaci�n en formato de texto de una configuraci�n de tablero de ajedrez:

White king: G1
White bishop: D6
White rook: E1
White pawn: A4
White pawn: B3
White pawn: C2
White pawn: F2
White pawn: G2
White pawn: H5
Black king: B6
Black queen: A7
Black pawn: A5
Black pawn: D4

Todos los programas de ejemplo usan el API Java para Procesar XML (JAXP) para interactuar con las diferentes implementaciones subyacentes de los analizadores SAX, los constructores de documentos DOM y los motores de Transformaci�n XSL, y comparten una estructura com�n que pemite comparar sus respectivos rendimientos. Permiten el paso t�pico de usar JAXP, y adicionalmente incluyen dos bucles para procesar el mismo documento varias veces y en varias ejecuciones. Por cada ejecuci�n, se usa una factor�a para crear un analizador, una procesador de hoja de estilo, etc, que a su vez son usados para procesar un documento fuente XML varias veces. La validaci�n del documento fuente contra sus DTDs o Esquemas XML declarados podr�a ser especificada cuando se llama al programa y est� implementada configurando la factor�a a trav�s de su m�todo setValidating que crea un analizador con o sin validaci�n.

En el c�digo de ejemplo (ChessboardSAXPrinter.java) de abajo, despu�s de ejecutarse se saca el tiempo medio tardado en procesar un documento. Los tiempos del sistema y del usuario podr�an medirse lanzando la M�quina Virtual Java (JVM) con el comando ptime.

C�digo de Ejemplo 3: Ejemplo de la estructura com�n de los programas de ejemplo (ChessboardSAXPrinter.java)

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class ChessboardSAXPrinter {
 private SAXParser parser;

 public ChessboardSAXPrinter(boolean validating)
   throws Exception {
  SAXParserFactory factory 
    = SAXParserFactory.newInstance();
  factory.setValidating(validating);
  parser = factory.newSAXParser();
  ...
  return;
 }

 public void print(String fileName, PrintStream out)
   throws SAXException, IOException {
  ...
  parser.parse(fileName, ...);
  return;
 }
  
 public static void main(String[] args) {
  ...   
  for (int k = 0; k < r; k++) {
    // r: number of runs
   ChessboardSAXPrinter saxPrinter
     = new ChessboardSAXPrinter(validating);
   long time = System.currentTimeMillis();
   for (int i = 0; i < n; i++) {
     // n: number of document processed per run
    saxPrinter.print(args[0], out);
   }
   // print out the average time (s) 
   // to process a document during the current run
   System.err.print( 
     (((double) (System.currentTimeMillis()
     - time)) / 1000 / n) + "\t");
  }
  ...
 }
}

Dependiendo del rendimiento probado, se realizan dos medidas diferentes:

  • El tiempo medio tardado en procesar el documento, medido entre cada ejecuci�n del propio programa con dos llamadas al m�todo System currentTimeMillis. S�lo las �ltimas ejecuciones podr�an ser tenidas en cuenta para esta medida permitiendo que todas las clases sean cargadas en la M�quina Virtual para compilar y optimizar los byte codes antes de empezar la medida. Esta medida se utiliza normalmente para ilustrar las diferencias entre las M�quinas Virtuales y especialmente la mejora de optimizaci�n sobre el tiempo. Esta medida es senbile a factores externos, especialmente con la actividad del sistema no ralacionada con la prueba.
  • La media del tiempo de sistema+usuario para procesar un documento, set� basada en la salida del comando ptime. La suma de los tiempos del sistema y del usuario para completar la ejecuci�n incluyendo la arrancada de la M�quina Virtual es medida y promediada por cada documento procesado. Esta medida es m�s fiable y se convierte en significante cuando el tiempo de arrancada es m�nimo comparado con la carga de trabajo preparada.

El fragmento de c�digo de un makefile (abajo) muestra que el programa fuente perf1 ChessboardSAXPrinter ser� ejecutado para todos los documentos fuente (../samples/Chessboards-{10, 100, 1000, 2000, 3000, 4000, 5000}.xml) seg�n se especifica en la variable SAMPLING y cada uno de esos documentos ser� procesado 10 veces (variable PROCESSINGS) por cada 10 ejecuciones (variable RUNS). Los tiempos de sistema y de usaurio ser�n medidos por el comando ptime y apropiadamente promediados y formateados por un script awk (variable FORMATTER). La variable OPTIONS permite pasar las propiedades seleccionadas a las implementaciones del analizador SAX, del constructor DOM o del motor XSLT para ser usadas. La propiedad XML.validation la usa el propio programa de ejemplo para activar o desactivar la validaci�n. La salida del program se redirige a /dev/null para minimizar el impacto de la I/O de disco en los resultados de rendimiento.

C�digo de Ejemplo 4: fragmento de c�digo de un makefile

SAMPLING=10 100 1000 2000 3000 4000 5000
MAXTIME=3000
RUNS=10
PROCESSINGS=10
TIMER=ptime

OPTIONS= \
  -Djavax.xml.parsers.SAXParserFactory=\
     org.apache.xerces.jaxp.SAXParserFactoryImpl \
  -Djavax.xml.parsers.DocumentBuilderFactory=\
     org.apache.xerces.jaxp.DocumentBuilderFactoryImpl \  
  -Djavax.xml.transformer.TransformerFactory=\
     org.apache.xalan.processor.TransformerFactoryImpl 

FORMATTER= \
  /usr/xpg4/bin/awk -v runs=$${RUNS:=$(RUNS)} \
    -v processings=$${PROCESSINGS:=$(PROCESSINGS)} ' \
BEGIN { \
  count=0; m=split("1:60:3600", f, ":"); \
} { \
  if ($$1=="sys" || $$1=="user") { \
    n=split($$2, a, ":"); \
    for (i = 1; i <= n; i++) { \
count += a[n - i + 1] * f[i]; \
    } \
  } \
} END { 
  printf ":%.4f", count / runs / processings; \
  if (count > $(MAXTIME)) exit 1; \
}'

perf1:
  echo "SAX/Validating (Xerces)\t\c"; \
    for i in $(SAMPLING); \
    do
$(TIMER) $(JAVA) -DXML.validation=true -Xms128m \
  -Xmx128m -classpath $(CLASSPATH) $(OPTIONS) 
  ChessboardSAXPrinter ../samples/Chessboards-$$i.xml 
  /dev/null $(PROCESSINGS) $(RUNS) 2>&1 \
| tee -a $(LOGS) \
| $(FORMATTER) || break; \
    done; \
    echo

Para seleccionar la implementaci�n del analizador SAXL, del constructor DOM o del motor XSLT a probar, se pasan las siguientes propiedades JAXP a la JVM (variable OPTIONS en el ejemplo de arriba):

API Propiedad Valor Implementaci�n
SAX javax.xml.parsers.
SAXParserFactory
org.apache.crimson.jaxp.
SAXParserFactoryImpl
Crimson
SAX javax.xml.parsers.
SAXParserFactory
org.apache.xerces.jaxp.
SAXParserFactoryImpl
Xerces
DOM javax.xml.parsers.
DocumentBuilderFactory
org.apache.crimson.jaxp.
DocumentBuilderFactoryImpl
Crimson
DOM javax.xml.parsers.
DocumentBuilderFactory
org.apache.xerces.jaxp.
DocumentBuilderFactoryImpl
Xerces
XSLT javax.xml.transformer.
TransformerFactory
org.apache.xalan.processor.
TransformerFactoryImpl
Xalan
XSLT javax.xml.transformer.
TransformerFactory
com.icl.saxon.
TransformerFactoryImpl
Saxon
XSLT javax.xml.transformer.
TransformerFactory
org.apache.xalan.
xsltc.runtime.
TransformerFactoryImpl
Xalan-XSLTC

.�Configuraci�n

Cada programa de ejemplo se ha probado en diferentes configuraciones: con diferentes tama�os de documentos procesados conformes a sus DTD o a un esquema XML, con o sin validaci�n, con diferentes implementaciones de analizador o motor de hoja de estilo, y con diferentes versiones de la JVM

Productos y Versiones
WorkStation Solaris Operating Environment (SPARC Platform Edition), Ultra-30
Java Runtimes JDK1.2.2_06, JDK1.3.1
Analizadores XML,
Motores XSLT
Xerces 1.3.1 y 1.4.4 (para XML Schemas)
Crimson 1.1 (incluido en JAXP 1.1)
Xalan-Java 2.1 (incluyendo XSLTC)
Saxon 6.3
JAXP 1.1
JDOM beta6
Programas de Ejemplo/APIs ChessboardSAXPrinter.java - SAX
ChessboardDOMPrinter.java - DOM
XSLTTransformation.java y ChessboardPrinter.xsl - XSLT
ChessboardXPathPrinter.java - XPath
ChessboardJDOMPrinter.java - JDOM

.�Medidas de Rendimiento

.�Comparar Rendimientos de SAX, DOM y XSLT

Esta prueba compara los rendimientos de SAX, DOM y XSLT cuando se aplican para procesar los documentos XML definidos anteriomente. Se han usado dos implementaciones de SAX y DOM: Xerces y Crimson.

Esta prueba midi� el tiempo para procesar documentos que describen 1000, 2000, 3000, 4000 y 5000 configuraciones de tableros de ajedrez. Cada documento ha sido procesado 10 veces en 10 ejecuciones. El tiempo medido fue sumado al tiempo del sistema y de usuario, y devuelto por el comando ptime, dividido por el n�mero total de documentos procesados.


Ilustraci�n 2: tiempo para procesar diferentes tama�os de documentos XML usando SAX, DOM y XSLT con Crimson y Xerces (JDK 1.2)

An�lisis

Podemos hacer tres observaciones a partir de estas medidas:

  1. Como esperabamos, la clasificaci�n, del m�s r�pido al m�s lento, es: SAX, DOM, y XSLT. Esto puede explicarse por el hecho de que t�picamente un motor XSLT tiene que compilar la hoja de estilo y luego construir internamente el �rbol de salida antes de empezar las transformaciones. Podr�a usar un constructor DOM para hacer esto. El propio constructor DOM podr�a usar un analizador SAX para analizar tanto el documento de entrada como la hoja de estilo. Si juntamos est�s t�ncicas, a�aden m�s funcionalidad, facilidad de uso y de mentenimiento, pero penalizan m�s el rendimiento.
  2. Crimson rinde mejor que Xerces. Crimson es una implementaci�n correcta de un analizador XML y tiene un peque�o tama�o 200KB (su tama�o de fichero jar) mientras que Xerces es m�s sofisticado e incluye muchas caracter�sticas adicionales como soporte de Esquemas XML. Xerces tambi�n viene con soporte DOMs de WML y HTML lo que incrementa significativamente el tama�o de su fichero jar hasta 1.5MB. La organizaci�n Apache est� re-construyendo Xerces y mejorando en el rendimiento en Xerces2.
  3. El tiempo de proceso de un documento se incrementa linearmente con el tama�o del documento. La linearidad del rendimiento demuestra que el test no expuso al m�ximo ning�n recurso del sistema, especialmente la memoria. Teniendo en cuenta esta lineraridad, para la mayor�a de los siguientes gr�ficos s�lo presentaremos los resultados de procesar el documento 1000-Chessboard XML de esta forma:

Ilustraci�n 3: Tiempo para procesar documentos XML 1000-Chessboard XML usando SAX, DOM y XSLT con Crimson y Xerces (JDK 1.2)

.�Comparar los Rendimientos de XSLT y XSLTC

Esta segunda prueba compara el rendimiento de motores XSLT normales y del motor XSLTC que compila las hojas de estilo en byte codes Java. XSLTC es ahora parte de Xalan y puede invocarse a trav�s del JAXP. No se necesitaron modificaciones en el programa de ejemplo para usar XSLTC.

Esta prueba midi� el tiempo para procesar documentos que describen 1000, 2000, 3000, 4000 y 5000 configuraciones de tableros de ajedrez (aunque aqu� s�lo presentemos el resultado de los documentos de 1000 configuraciones). Cada documento ha sido procesado 10 veces en 10 ejecuciones. El tiempo medido fue sumado al tiempo del sistema y de usuario, y devuelto por el comando ptime, dividido por el n�mero total de documentos procesados.

Medidas


Ilustraci�n 4: Tiempo de procesar documentos XML de 1000-Chessboard usando XSLT y XSLTC (JDK 1.2)

An�lisis

Esta prueba mostr� que Xalan y Saxon rinden pr�cticamente lo mismo y que compilar las hojas de estilo en byte codes Java podr�a mejorar el rendimiento hasta en un 40% cuando se compara con las implementaciones cl�sicas como Xalan o Saxon sobre Crimson. Compar�ndolo con las pruebas anteriores, las hojas de estilo compiladas podr�an dar mejor rendimiento que DOM y muy cercano a SAX

.�Comparar Rendimiento con Validaci�n y sin Validaci�n

Ahora comparamos los rendimientos de SAX y DOM con y sin validaci�n. Usando las implementaciones SAX y DOM de Crimson y Xerces. Lo que se pretende aqu� es medir el impacto de la validaci�n en el tiempo de proceso. Para las especificaciones XML, un analizador sin validaci�n no se requiere que lea las entidades externas (incluyendo una DTD externa); por lo tanto las entidades externas referenciadas en el documento podr�an no ser expandidas y los atributos podr�an no tener sustituidos sus valores por defecto. As�, la informaci�n pasada a la aplicaci�n llamante podr�a no ser equivalente cuando se usa un analizador con o sin validaci�n. En el contexto de este documento, s�lo consideramos los analizadores que incluso cuando son sin validaci�n, cargan y analizan la DTD y las entidades referenciadas en el documento. Este permite, por ejemplo, que las entidades sean susituidas, que los valores de atributos sean normalizados y sus valores por defecto apropiadamente sustituidos, por eso que la aplicaci�n se puede ejecutar sin ningun cambio cuando cambiamos de validaci�n a sin validaci�n el documento de entrada.

Esta prueba midi� el tiempo para procesar documentos que describen 1000, 2000, 3000, 4000 y 5000 configuraciones de tableros de ajedrez (aunque aqu� s�lo presentemos el resultado de los documentos de 1000 configuraciones). Cada documento ha sido procesado 10 veces en 10 ejecuciones. El tiempo medido fue sumado al tiempo del sistema y de usuario, y devuelto por el comando ptime, dividido por el n�mero total de documentos procesados.

Medidas


ILustraci�n 5: Tiempo para procesar un documento XML de 1000 configuraciones de tablero de ajedrez usando las implementaciones de DOM y SAX de Crimson y Xerces con y sin validaci�n.

An�lisis

SAX rinde mejor que DOM y la validaci�n de los documentos XML de entrada contra sus DTDs incurre en una sobrecarga de hasta el 12% en el caso de la implementaci�n SAX de Xerces. Con la excepci�n de la implementaci�n SAX de Xerces, el coste de la validaci�n es independiente del API utilizado. La validaci�n se realiza internamente en el analizador. Si un constructor DOM se implementa sobre un analizador DocumentHandler personalizado (ContentHandler en SAX 2), entonces la diferencia entre DOM y SAX se puede tener en cuenta para la construcci�n del �rbol DOM desde los eventos SAX disparados por el analizador.

.�Comparar Rendimientos de APIs Alternativos (JDOM, Xpath, YAXA)

Esta prueba compara los rendimientos de DOM con JDOM y XPath. El programa de ejemplo JDOM usa un SAXBuilder para analizar el documento fuente XML en memoria. Pasa a trav�s del documento JDOM resultante y saca el resultado en formato texto. El programa de ejemplo XPath usa el API DOM para analizar y cargar un documento XML en memoria. Luego eval�a expresiones XPath para localizar elementos a ser procesados y saca el resultado en formato texto.

Adicionalmente, esta prueba compara YAXA con SAX y DOM. YAXA es un API experimental que funciona sobre SAX y anade el cl�sico paradigma Java Event/Source/Listener. El programa de ejemplo YAXA usa un DefaultHandler de SAX2 personalizado para registrar oyentes de eventos que capturan los eventos disparados por el analizador SAX subyacente. YAXA tambi�n proprociona un editor de streams de eventos basado en el modelo anterior que edita directamente el flujo de eventos disparado por el analizador SAX. El programa de ejemplo YAXA-SE usa este editor de streams para aplicar un script de edici�n al flujo de eventos y genera la misma salida que los otros proramas. El editor de streams de eventos estaba inspirado en el comando sed de UNIX.

Esta prueba midi� el tiempo para procesar documentos que describen 1000, 2000, 3000, 4000 y 5000 configuraciones de tableros de ajedrez (aunque aqu� s�lo presentemos el resultado de los documentos de 1000 configuraciones). Cada documento ha sido procesado 10 veces en 60 ejecuciones. El tiempo medido fue sumado al tiempo del sistema y de usuario, y devuelto por el comando ptime, dividido por el n�mero total de documentos procesados.

Medidas


Ilustraci�n 6: Tiempo para procesar un documento XML con 1000 configuraciones de tableros de ajedrez con DOM, JDOM y XPath, usando Crimson y Xerces con validaci�n (JDK 1.2)


Ilustraci�n 7: Tiempo para procesar un documento XML con 1000 configuraciones de tableros de ajedrez con SAX, DOM, YAXA y YAXA-SE (editor de streams de eventos), usando Crimson con validaci�n (JDK 1.2)

An�lisis

JDOM es ligeramente m�s r�pido que DOM (alrededor de un 10%) usando la misma implementaci�n de analizador subyacente. Por otro lado XPath rinde de forma casi id�ntica, independientemente de la implementaci�n del analizador subyacente. Esto es debido al hecho de que la mayor�a del tiempo se va en localizar los elementos relevantes para ser procesados con la expresiones XPath. Como hemos usado la misma implementaci�n de XPath (de Xalan), el tiempo de proceso total es el mismo.

El rendimiento de YAXA es un poco mejor que el de DOM. Como los elementos a procesar constituyen el 90% de todo el documento, termina la creaci�n de eventos de la misma forma que DOM crea objetos nodo. Tambi�n sigue la pista del contexto actual con una pila que es casi equivalente a construiir el �rbol de modelo del documento. Por otro lado, con un simple pero comparable (en el ejemplo dado) mecanismo de correspondencia de patr�n, YAXA y el editor de streams de YAXA rinden mejor que XPath y XSLT para esta tarea sencilla.

.�Comparar Diferentes Versiones de la JVM

Esta prueba compara el rendimiento de tres diferentes implementaciones/configuraciones del entorno de ejecuci�n Java, JDK 1.2, JDK 1.3 servidor, y JDK 1.3 cliente. Se usaron para procesar los documentos XML definidos anteriormente con dos diferentes implementaciones de SAX y DOM (Xerces y Crimson).

Esta prueba midi� el tiempo para procesar documentos que describen 1000, 2000, 3000, 4000 y 5000 configuraciones de tableros de ajedrez (aunque aqu� s�lo presentemos el resultado de los documentos de 1000 configuraciones). Cada documento ha sido procesado 10 veces en 60 ejecuciones. El tiempo medido fue sumado al tiempo del sistema y de usuario, y devuelto por el comando ptime, dividido por el n�mero total de documentos procesados.

Medidas


Ilustraci�n 8: Tiempo para procesar un documento XML con 1000 configuraciones de tableros de ajedrez usando SAX, DOM, con Crimson y Xerces sobre JDK 1.2, JDK 1.3 Client, y JDK 1.3 Server.


Ilustraci�n 9: El entorno de ejecuci�n JDK 1.3 Server mejor� sobre las 60 ejecuciones del programa de ejemplo DOM sobre Xerces. Una sensible optimizaci�n se realiz� al final de la prueba que no pudo mostarse en el gr�fico anterior

An�lisis

Los entornos JDK 1.2 y JDK 1.3 Client rinden de forma similar. Con la excepci�n del programa DOM que usa Xerces, el entorno JDK 1.3 Server es capaz de mejorar el rendimiento de JDK 1.2 entre un 33 y un 38%. Por otro lado, para los programas de ejemplo DOM usando Xerces, el rendimiento baj� un 5%, pero como se ve en la curva, al final del periodo de ejecuci�n el entorno JDK 1.3 Server fue capaz de optrimizarlo y ganar un 17% (de 6 a 5).

.�Comparar el Rendimiento de los M�todos de Acceso DOM

El API DOM ofrece diferentes m�todos para acceder a un enlemento de un documento de entrada:

  1. Por nombre (usando getElementsByTagName), todos los elementos con un nombre de etiqueta dado ser�n devueltos en el orden en que sean encontrados en un orden pr�vio desde el nodo documento o elemento actual.
  2. Bajando por la estructura del �rbol (usando getChildNodes), se devolveran todos los hijos inmediatos del nodo documento o elemento actual.

El primer m�todo es m�s costoso porque se tiene que atravesar totalmente el sub-arbol por cada llamada al m�todo getElementsByTagName, poro podr�a requerir menos conocimiento de la estructura del �rbol ya que se hace una b�squeda exhaustiva. La b�squeda de diferentes nombres de elementos podr�a requerir atravesar el �rbol varias veces. El segundo m�todo es menos costoso porque el atravesamiento del �rbol est� controlado: s�lo las partes relevantes del sub-�rbol podr�an ser atravesadas y podr�a serlo s�lo una vez; pero por otro lado, requiere un conocimiento m�s profundo de la estructura del documento.

Hasta ahora, las pruebas DOM s�lo utilizaron el segundo m�todo. Esta prubea mide la diferencia entre estas dos implementaciones de DOM.


Ilustraci�n 10: Tiempo para procesar diferentes tama�os de documentos XML usando diferentes m�todos del API DOM y diferentes implementaciones (JDK 1.2)

An�lisis

Como esperabamos, el m�todo que trata con el m�todo getElementsByTagName es m�s lento que los otros. Pero dependiendo de la implementaci�n (espec�ficamente la implementaci�n del algoritmo que pasa a trav�s del �rbol), la diferencia podr�a ser peque�a (Xerces) o dram�ticamente mayor/explosiva (Crimson).

.�Comparar el Rendimiento de la Validaci�n de DTD y de Esquema XML

Esta prueba compara el rendimiento de las validaciones contra DTDs y Esquemas XML. Usa la implementaci�n SAX de Xerces (la �nica de las dos implementaciones que soporta Esquemas XML).

Esta prueba midi� el tiempo para procesar documentos que describen 1000, 2000, 3000, 4000 y 5000 configuraciones de tableros de ajedrez (aunque aqu� s�lo presentemos el resultado de los documentos de 1000 configuraciones). Cada documento ha sido procesado 10 veces en 10 ejecuciones. El tiempo medido fue sumado al tiempo del sistema y de usuario, y devuelto por el comando ptime, dividido por el n�mero total de documentos procesados.

Medidas


Ilustraci�n 11: Tiempo para procesar un documento XML con 1000 configuraciones de tableros de ajedrez usando la implementaci�n SAX de Xerces con validaci�n contra un DTD y un esquema XML (usando Xerces 1.4.4).

An�lisis

Con Xerces, la validaci�n contra un Esquema XML es m�s costosa que contra un DTD equivalente. Cuando no se realiza validaci�n, usar un Esquema XML parece ser m�s r�pido que usar el DTD. Esto es debido al hecho de que en esta implementaci�n particular de Xerces (1.4.4), el esquema XML referenciado en el documento de entrada ni siquiera es le�do (como hemos revelado monitorizando las llamadas al m�todo EntityResolver). El ejemplar del documento del Esquema XML es por lo tanto tratado como un documento sin DTD (ya que no hay incluso una Declaraci�n de Tipo de Documento - DOCTYPE).

Cuando se ejecuta la comparaci�n con una versi�n m�s reciente de Xerces (2.0b4), cuando no se realiza validaci�n, usar el esquema XML es m�s lento que usar la DTD, casi haciendo la imagen inversa de los resultados obtenidos cuando se valida. En este ejemplar particular, la monitorizaci�n de las llamadas a EntityResolver mostr� que el Esquema XML era cargado y analizado efectivamente. Incidentalmente, tambi�n observamos una sensible mejora del rendimiento con esta nueva versi�n de Xerces.


Ilustraci�n 12: Tiempo para procesar un documento XML con 1000 configuraciones de tableros de ajedrez usando la implementaci�n SAX de Xerces con validaci�n contra un DTD y un esquema XML (usando Xerces 2.0b4).

.�Conclusi�n

En esta p�gina, hemos probado los diferentes programas de ejemplo presentados en la p�gina anterior y hemos analizado sus respectivos rendimientos cuando se ejecutan en diferentes configuraciones: con diferentes tama�os de documentos procesados, conformes a una DTD o a un Esquema XML, con o sin validaci�n, con diferentes implementaciones de analizadores o motores de hojas de estilos subyacentes y con diferentes versiones de la JVM. Teniendo en cuenta los resultados presentados, la siguiente p�gina intentar� mostrarnos algunos trucos para mejorar el rendimiento de las aplicaciones basadas en XML desde un punto de vista program�tico y arquitectural.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR