Daniel Jettka

/da:njεl jεtka/

Даниел Йетка

दआनईऐल यऐततखआ

Δανιελ Ιετκα

داناال یاتتکہ, ﮩ, ﮨ

ฎ-าณ -ิแ-ะฏ ญแ-ะจจก-ะ

ִתךכ‎ֶידניאל

English Language Flag

Vergleich von XSLT-Prozessoren

Um einen ersten Eindruck von der Performanz verschiedener XSLT 2.0-Prozessoren zu erlangen, habe ich einige Prozessoren im Hinblick auf ihre Ausführung einer bestimmten XSLT-Transformation miteinander verglichen (Systeminformationen des verwendeten Rechners: Intel(R) Atom, 1.60GHz, 0.99GB RAM, Microsoft Windows XP Home Edition, Version 2002, SP 3). Der im Folgenden dargelegte Ansatz sollte nicht als repräsentative Untersuchung der Prozessoren verstanden werden, sondern vielmehr als ein erster Einblick in die sich bezüglich ihrer Schnelligkeit sehr heterogen darstellenden Prozessoren. Für verlässliche Aussagen zum genauen Verhalten der verschiedenen Prozessoren bei verschiedenen Aufgabenstellungen, müssten weitere Untersuchungen durchgeführt werden. Folgende Prozessoren wurden miteinander verglichen:

Mit jedem dieser Prozessoren wurden insgesamt 19 XSLT-Transformationen unter Zuhilfenahme von Batch-Dateien von der Kommandozeile aus auf Basis des folgenden Stylesheets durchgeführt:


<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <node>
      <xsl:copy-of select="for $node in //* return //*[.=$node]"/>
    </node>
  </xsl:template>
</xsl:stylesheet>
      

Dieses Stylesheets erstellt für jedes vorhandene Element in einer XML-Datei eine Tiefenkopie (deep copy), d.h. eine Kopie des Elements inkl. aller seiner Attribute und Nachfahren. Zusätzliche Komplexität für die Kopie des in der Variable $node gespeicherten Kontextknotens entsteht durch das Prädikat [.=$node], welches den Prozessor dazu veranlasst, einen Vergleich aller im Dokument vorhandenen Knoten mit dem Kontextknoten durchzuführen.

Die 19 unterschiedlichen XML-Eingabedateien für die Transformation wurden systematisch erstellt, enthalten jeweils 97 bis 101 Elementknoten, und unterscheiden sich im Hinblick auf die Einbettungstiefe der in ihnen enthaltenen Elemente. Anhand der nachfolgenden vier XML-Dateien kann die Systematik der variierenden Einbettungstiefe nachvollzogen werden. Die erste Zahl des Dokumentnamens gibt hierbei jeweils die Anzahl der direkten Kindelemente des Wurzelelements an, die zweite Zahl die Einbettungstiefe der Nachfahren der direkten Kindelemente des Wurzelelements:

1x100.xml


<node>
  <node>
    <node>
      <!-- rekursive Einbettung (insg. 101 Elemente), nur ein Blattknoten -->
    </node>
  </node>
</node>
      

2x50.xml


<node>
  <node>
    <!-- rekursive Einbettung (50 node-Elemente) -->
  </node>
  <node>
  <!-- rekursive Einbettung (50 node-Elemente) -->
  </node>
</node>
      

... 3x33.xml, 4x25.xml, 5x20.xml, 6x16.xml, 7x14.xml, 8x12.xml, 9x11.xml, 10x10.xml, 11x9.xml, 12x8.xml, 14x7.xml, 16x6.xml, 20x5.xml, 25x4.xml, 33x3.xml ...

50x2.xml


<node>
  <node>
    <node/>
  </node>
  <!-- 50 mal obige Struktur, insg. 50 Blattknoten -->
</node>
      

100x1.xml


<node>
  <node/>
  <!-- 100 leere node-Elemente, insg. 100 Blattknoten -->
</node>
      

Da während der zugrunde liegenden XSLT-Transformation von jedem vorhandenen Element eines XML-Eingabedokuments eine Tiefenkopie erstellt wird, steigt die Größe des Outputs proportional zur Einbettungstiefe der Elemente.

Wie bereits erwähnt, wurden die XSLT-Transformationen mittels Batch-Dateien ausgeführt. Diese haben die jeweiligen Zeiten, welche für die Transformationen benötigt wurden, ermittelt (hier zeigt sich, dass die Vergleichsstudie nur die Schnelligkeit der Prozessoren untersucht. Andere möglicherweise interessante Parameter, wie bspw. der Speicherbedarf, wurden nicht festgehalten) und in Log-Dateien geschrieben, welche später ausgewertet wurden. Die Zeit, welche die verschiedenen XSLT-Prozessoren für die Transformation der jeweiligen XML-Dateien benötigt haben, ist in folgender Grafik und der nachfolgenden Tabelle zusammengefasst:

Dauer von XSLT-Transformationen verschiedener Prozessoren

100x1 50x2 33x3 25x4 20x5 16x6 14x7 12x8 11x9 10x10 9x11 8x12 7x14 6x16 5x20 4x25 3x33 2x50 1x100
SaxonEE 9.2.1.5n 6,2 6,2 6,21 6,26 6,24 6,23 6,53 6,23 6,29 6,3 6,31 6,29 6,33 6,39 6,48 6,52 6,69 6,84 10,67
SaxonPE 9.2.1.5n 6,01 6,03 6,05 6,05 6,1 6,04 6,08 6,08 6,11 6,17 6,17 6,16 6,17 6,22 6,3 6,33 6,46 6,65 9,5
SaxonB 9.1.0.1n 3,86 3,89 3,91 3,95 3,94 3,97 3,96 3,97 4,03 4,11 4,09 4,09 4,19 4,17 4,29 4,45 4,61 5,13 16,69
SaxonEE 9.2.1.5j 3,67 3,74 3,75 3,76 3,82 3,75 3,73 3,75 3,77 3,79 3,85 3,92 3,81 3,8 3,86 3,94 4,04 4,13 5,73
SaxonPE 9.2.1.5j 3,42 3,43 3,42 3,48 3,42 3,44 3,42 3,42 3,49 3,48 3,47 3,49 3,54 3,49 3,54 3,58 3,74 3,87 5,66
SaxonB 9.1.0.3j 1,92 1,92 1,99 1,98 2,02 1,98 1,99 2,04 1,99 2,05 2,04 2,03 2,05 2,05 2,17 2,23 2,38 2,51 3,82
Altova2008 1,32 1,56 1,75 1,98 2,17 2,27 2,48 2,58 2,91 3,11 3,25 3,31 3,81 4,05 5,19 6,47 7,87 11,6 24,69
Altova2011re 0,78 0,89 0,94 1,03 1,12 1,13 1,25 1,29 1,49 1,55 1,64 1,61 1,86 1,98 2,39 2,83 3,64 5,28 13,31
Altova2011ce 0,78 0,88 0,93 1,03 1,13 1,14 1,25 1,3 1,43 1,55 1,6 1,6 1,86 1,94 2,39 2,83 3,64 5,38 13,25
Gestalt 1,22 1,36 1,43 1,58 1,69 1,66 1,82 1,96 2,06 2,2 2,26 2,29 2,53 2,62 3,24 3,73 4,56 6,46 12,59

Neuigkeiten

Letzte Updates

26. März 2011

Der Menüpunkt "Studium" wurde durch "Lehre" ersetzt.

ansehen

12. September 2010

Ab sofort steht die Website auch auf Englisch zur Verfügung (siehe Button in der rechten oberen Ecke).

ansehen

Banner: Make a difference?