Performance-beeinflussende Dimensionen
- Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
- Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
- Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.
- Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
- Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
- Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.
- Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
- Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
- Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.
- Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
- Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
- Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.
- Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
- Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
- Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.
- Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
- Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
- Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.
- Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
- Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
- Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.
Performance-beeinflussende Dimensionen
Performance-beeinflussende Dimensionen
Performance-beeinflussende Dimensionen
Performance-beeinflussende Dimensionen
Performance-beeinflussende Dimensionen
Performance-beeinflussende Dimensionen
Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.
Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.
Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.
Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.
Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.
Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:
Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.
Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.
Da in den meisten Pipeline-Transformatoren aus dem Request-Input zunächst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschränkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verhältnis grundsätzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.
Interaktionen
Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event
- bzw. trainCDL4
-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.
Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
<Rule id="1100028172564" rating="negative">
<DiscAtt cmp="unequal" type="category" value="action"/>
<DiscAtt cmp="unequal" type="medium" value="bild"/>
<DiscAtt cmp="unequal" type="category" value="scifi"/>
<DiscAtt cmp="unequal" type="medium" value="toggletext"/>
</Rule>
darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.
In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.
Sie werden durch den Tag <aada:Logic>
eingeleitet, können if
-Zweige, switch
- bzw. trinary
-Anweisungen enthalten und ebenfalls rekursiv auftreten.
<aco:MetaInformation>....<aada:Logic>
<aada:Switch>
<aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
<aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
</aada:Logic>...</aco:MetaInformation>
Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic
- Transformators (früher Adaption.xsl
) statt.
Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.
Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.
Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.
Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].
Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.
Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.
Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.
Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.
Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form
<map:global-variables><skin>web/images/portal/</skin>
<files>web/portal/</files>
<trans>web/xsl/</trans>
</map:global-variables>
welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.
Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.
Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.
Nutzerzahlen
Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.
Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.
Serverleistung
Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.
Adaptivität der Anwendung
Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:
Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.
Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.
Dokumentengröße
Da in den meisten Pipeline-Transformatoren aus dem Request-Input zunächst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschränkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verhältnis grundsätzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.
Interaktion
Interaktionen
Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event
- bzw. trainCDL4
-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.
Regeln
Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
<Rule id="1100028172564" rating="negative">
<DiscAtt cmp="unequal" type="category" value="action"/>
<DiscAtt cmp="unequal" type="medium" value="bild"/>
<DiscAtt cmp="unequal" type="category" value="scifi"/>
<DiscAtt cmp="unequal" type="medium" value="toggletext"/>
</Rule>
darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.
Logiken
In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.
Sie werden durch den Tag <aada:Logic>
eingeleitet, können if
-Zweige, switch
- bzw. trinary
-Anweisungen enthalten und ebenfalls rekursiv auftreten.
<aco:MetaInformation>....<aada:Logic>
<aada:Switch>
<aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
<aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
</aada:Logic>...</aco:MetaInformation>
Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic
- Transformators (früher Adaption.xsl
) statt.
Verwendeter Interpret
Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.
Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.
Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.
Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].
Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.
Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.
Zusammenfassung
Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.
Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.
Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form
<map:global-variables><skin>web/images/portal/</skin>
<files>web/portal/</files>
<trans>web/xsl/</trans>
</map:global-variables>
welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.
Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.
Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.
Nutzerzahlen
Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.
Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.
Serverleistung
Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.
Adaptivität der Anwendung
Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:
Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.
Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.
Dokumentengröße
Da in den meisten Pipeline-Transformatoren aus dem Request-Input zunächst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschränkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verhältnis grundsätzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.
Interaktion
Interaktionen
Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event
- bzw. trainCDL4
-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.
Regeln
Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
<Rule id="1100028172564" rating="negative">
<DiscAtt cmp="unequal" type="category" value="action"/>
<DiscAtt cmp="unequal" type="medium" value="bild"/>
<DiscAtt cmp="unequal" type="category" value="scifi"/>
<DiscAtt cmp="unequal" type="medium" value="toggletext"/>
</Rule>
darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.
Logiken
In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.
Sie werden durch den Tag <aada:Logic>
eingeleitet, können if
-Zweige, switch
- bzw. trinary
-Anweisungen enthalten und ebenfalls rekursiv auftreten.
<aco:MetaInformation>....<aada:Logic>
<aada:Switch>
<aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
<aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
</aada:Logic>...</aco:MetaInformation>
Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic
- Transformators (früher Adaption.xsl
) statt.
Verwendeter Interpret
Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.
Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.
Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.
Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].
Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.
Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.
Zusammenfassung
Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.
Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.
Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form
<map:global-variables><skin>web/images/portal/</skin>
<files>web/portal/</files>
<trans>web/xsl/</trans>
</map:global-variables>
welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.
Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.
Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.
Nutzerzahlen
Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.
Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.
Serverleistung
Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.
Adaptivität der Anwendung
Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:
Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.
Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.
Dokumentengröße
Da in den meisten Pipeline-Transformatoren aus dem Request-Input zunächst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschränkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verhältnis grundsätzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.
Interaktion
Interaktionen
Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event
- bzw. trainCDL4
-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.
Regeln
Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
<Rule id="1100028172564" rating="negative">
<DiscAtt cmp="unequal" type="category" value="action"/>
<DiscAtt cmp="unequal" type="medium" value="bild"/>
<DiscAtt cmp="unequal" type="category" value="scifi"/>
<DiscAtt cmp="unequal" type="medium" value="toggletext"/>
</Rule>
darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.
Logiken
In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.
Sie werden durch den Tag <aada:Logic>
eingeleitet, können if
-Zweige, switch
- bzw. trinary
-Anweisungen enthalten und ebenfalls rekursiv auftreten.
<aco:MetaInformation>....<aada:Logic>
<aada:Switch>
<aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
<aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
</aada:Logic>...</aco:MetaInformation>
Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic
- Transformators (früher Adaption.xsl
) statt.
Verwendeter Interpret
Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.
Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.
Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.
Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].
Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.
Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.
Zusammenfassung
Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.
Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.
Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form
<map:global-variables><skin>web/images/portal/</skin>
<files>web/portal/</files>
<trans>web/xsl/</trans>
</map:global-variables>
welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.
Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.
Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.
Nutzerzahlen
Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.
Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.
Serverleistung
Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.
Adaptivität der Anwendung
Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:
Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.
Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.
Dokumentengröße
Da in den meisten Pipeline-Transformatoren aus dem Request-Input zunächst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschränkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verhältnis grundsätzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.
Interaktion
Interaktionen
Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event
- bzw. trainCDL4
-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.
Regeln
Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
<Rule id="1100028172564" rating="negative">
<DiscAtt cmp="unequal" type="category" value="action"/>
<DiscAtt cmp="unequal" type="medium" value="bild"/>
<DiscAtt cmp="unequal" type="category" value="scifi"/>
<DiscAtt cmp="unequal" type="medium" value="toggletext"/>
</Rule>
darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.
Logiken
In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.
Sie werden durch den Tag <aada:Logic>
eingeleitet, können if
-Zweige, switch
- bzw. trinary
-Anweisungen enthalten und ebenfalls rekursiv auftreten.
<aco:MetaInformation>....<aada:Logic>
<aada:Switch>
<aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
<aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
</aada:Logic>...</aco:MetaInformation>
Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic
- Transformators (früher Adaption.xsl
) statt.
Verwendeter Interpret
Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.
Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.
Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.
Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].
Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.
Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.
Zusammenfassung
Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.
Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.
Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form
<map:global-variables><skin>web/images/portal/</skin>
<files>web/portal/</files>
<trans>web/xsl/</trans>
</map:global-variables>
welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.
Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.
Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.
Nutzerzahlen
Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.
Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.
Serverleistung
Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.
Adaptivität der Anwendung
Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:
Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.
Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.
Dokumentengröße
Da in den meisten Pipeline-Transformatoren aus dem Request-Input zunächst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschränkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verhältnis grundsätzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.
Interaktion
Interaktionen
Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event
- bzw. trainCDL4
-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.
Regeln
Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
<Rule id="1100028172564" rating="negative">
<DiscAtt cmp="unequal" type="category" value="action"/>
<DiscAtt cmp="unequal" type="medium" value="bild"/>
<DiscAtt cmp="unequal" type="category" value="scifi"/>
<DiscAtt cmp="unequal" type="medium" value="toggletext"/>
</Rule>
darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.
Logiken
In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.
Sie werden durch den Tag <aada:Logic>
eingeleitet, können if
-Zweige, switch
- bzw. trinary
-Anweisungen enthalten und ebenfalls rekursiv auftreten.
<aco:MetaInformation>....<aada:Logic>
<aada:Switch>
<aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
<aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
</aada:Logic>...</aco:MetaInformation>
Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic
- Transformators (früher Adaption.xsl
) statt.
Verwendeter Interpret
Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.
Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.
Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.
Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].
Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.
Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.
Zusammenfassung
Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.
Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.
Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form
<map:global-variables><skin>web/images/portal/</skin>
<files>web/portal/</files>
<trans>web/xsl/</trans>
</map:global-variables>
welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.
Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.
Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.
Nutzerzahlen
Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.
Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.
Serverleistung
Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.
Adaptivität der Anwendung
Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:
Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.
Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.
Dokumentengröße
Da in den meisten Pipeline-Transformatoren aus dem Request-Input zunächst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschränkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verhältnis grundsätzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.
Interaktion
Interaktionen
Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event
- bzw. trainCDL4
-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.
Regeln
Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
<Rule id="1100028172564" rating="negative">
<DiscAtt cmp="unequal" type="category" value="action"/>
<DiscAtt cmp="unequal" type="medium" value="bild"/>
<DiscAtt cmp="unequal" type="category" value="scifi"/>
<DiscAtt cmp="unequal" type="medium" value="toggletext"/>
</Rule>
darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.
Logiken
In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.
Sie werden durch den Tag <aada:Logic>
eingeleitet, können if
-Zweige, switch
- bzw. trinary
-Anweisungen enthalten und ebenfalls rekursiv auftreten.
<aco:MetaInformation>....<aada:Logic>
<aada:Switch>
<aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
<aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
</aada:Logic>...</aco:MetaInformation>
Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic
- Transformators (früher Adaption.xsl
) statt.
Verwendeter Interpret
Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.
Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.
Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.
Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].
Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.
Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.
Zusammenfassung
Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.
Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.
Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form
<map:global-variables><skin>web/images/portal/</skin>
<files>web/portal/</files>
<trans>web/xsl/</trans>
</map:global-variables>
welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.
Ein komplexes System wie das vorgestellte ist von einer Vielzahl beeinflussender Dimensionen abhängig. Die bedeutendsten sollen nun vorgestellt werden, da diese den Schwerpunkt der darauf folgenden Performance-Tests darstellen.
Dabei soll bei folgender Aufzählung Hardware- bzw. Nutzerbetreffenden als äußere, sowie die Pipeline-durchlaufenden und Adaptivität betreffenden als innere Dimensionen unterschieden werden. Kriterien wie veränderte Laufzeitumgebungen, JVMs, u.ä. sind kein Bestandteil dieser Betrachtung, da diese an tiefer liegenden Schichten angreifen und ständiger Weiterentwicklung unterliegen. Für Sie gelten die allgemeinen Aussagen der jeweiligen Diensteanbieter.
Nutzerzahlen
Nach [CoP04] ist bei Nutzung des Apache Cocoon-Frameworks mit einer direkten Proportionalität zwischen Nutzerzahl und benötigter Antwortzeit zu rechnen. Im unter der Quelle angegebenen Beispiel wurden konkret durchschnittlich von 140ms für anfänglich 40 gleichzeitige Nutzer, über 280ms für 80 Nutzer, hin zu 560ms für 160 Nutzer benötigt.
Die folgenden Tests sollen diese These bestätigen bzw. widerlegen. Grundsätzlich hängen die Antwortzeiten von der Art der Web-Anwendung ab. Beispielsweise könnte eine Architektur sich bei Lasten automatisch ändern. Bei den folgenden Tests wird von einer konstanten Umgebung ausgegangen.
Serverleistung
Vermutlich wird sich die Bearbeitungszeit des Servers unter idealen Bedingungen indirekt proportional zur Gesamtleistung des Systemes entwickeln. Besonders Wert ist dabei, wie bei allen Webserver-Systemen, auf einen ausreichenden Arbeitsspeicher zu legen, da Swapping die Performance sehr stark beeinträchtigt. Da dieser Punkt ebenfalls tiefer liegende Schichten betrifft und den Umfang dieser Arbeit sprengen würde, soll auch er hier nicht näher betrachtet werden.
Adaptivität der Anwendung
Apache Cocoon gibt unter [CoP04] einige Grundformeln für die reine sitemap-seitige Performance-Berechnung an:
- Das Pipeline-Processing ist demnach abhängig von der Anzahl der gleichzeitigen Nutzer multipliziert mit der Tiefe der Kontent-Aggregation.
- Für die sequentielle Aggregation im entsprechenden Generatoren, Transformatoren bzw. Serializer gilt wiederum der Aufwand, welcher für die Abarbeitung eines Pipeline-Requests benötigt wird multipliziert mit der Anzahl der gleichzeitigen Nutzer-Requests.
- Daraus folglich gilt für die Connectoren, dass deren Leistung sich aus der Anzahl der Pipeline-Komponenten für die Abarbeitung eines Nutzerrequests multipliziert mit der Anzahl der gleichzeitigen Nutzer zusammensetzt.
Daraus ergibt sich, das neben der Nutzeranzahl (vergleiche 3.4.1) die Kontent-Aggregation (also Regeln, Interaktionen, Logiken) und davon abhängig die Pipeline-Request-Zeit von Bedeutung sind.
Die Kontent-Aggregation umfasst den HTTP-Request, das Nutzermodell sowie das Eingabedokument. Wie bereits im Kapitel 3.3 angeschnitten, umfasst dabei der HTTP-Request eine Anzahl neuer Nutzerinteraktionen. Das Nutzermodell kann je nach Nutzer eine variierende Anzahl von Regeln enthalten. Das Eingabe-Dokument wird durch eine bestimmte Logikanzahl und allgemeine Dateigröße gekennzeichnet. Ohne das Wissen dieser Angaben liese sich die Aggregation nur durch Hinzunahme der allgemeinen Dokumentgröße und des verwendeten Interpreten annähern bestimmen.
Dokumentengröße
Da in den meisten Pipeline-Transformatoren aus dem Request-Input zunächst ein abzuarbeiten DOM-Baum erstellt wird, sollten die Rekursionen auf einen geringen Teil beschränkt bleiben. Aus diesem Grund kann man bei konstantem Daten-Logiken-Verhältnis grundsätzlich softwareseitig ein proportionales Wachstum in jedem einzelnen betroffenen Transformator erwarten.
Interaktion
Interaktionen
Nutzerinteraktionen werden während des Surfens auf Clientseite erstellt und beim Absenden eines Requests mit an den Server übertragen. Die Auswertung dieser Informationen erfolgt durch den CDL4-Algorithmus zu Beginn der Amacont-Pipeline im Event
- bzw. trainCDL4
-Transformator und endet in der eventuellen Erstellung neuer Regeln zum Nutzerverhalten. Demnach kann eine Proportionalität zwischen Interaktionsanzahl und benötigter Zeitdauer in diesem Transformator erwartet werden.
Regeln
Die durch die Interaktion des Nutzers gesammelten Informationen werden durch den CDL4-Transformator in permanente Regeln umgewandelt und permanent im Benutzermodell abgelegt. Näher Informationen dazu findet man unter [Ama03]. Diese Regeln, den Charakter
<Rule id="1100028172564" rating="negative">
<DiscAtt cmp="unequal" type="category" value="action"/>
<DiscAtt cmp="unequal" type="medium" value="bild"/>
<DiscAtt cmp="unequal" type="category" value="scifi"/>
<DiscAtt cmp="unequal" type="medium" value="toggletext"/>
</Rule>
darstellend, werden nun bei jedem weiteren Aufruf ebenfalls nach der Adaption und innerhalb des evalMedia-Transformators abgearbeitet (vergl. Abb. 14). Es kann ein proportionales Wachstum in Zusammenhang mit der Zeitdauer der beteiligten Transformatoren erwartet werden.
Logiken
In Java-Komponenten wie auch reinen XSLT Stylesheets hängt die Gesamtperformanz stark von der Komplexität ab. Logiken stellen die Anpassungen an bestimmte Nutzer dar und sind auf die Geräteanpassung oder Regel-Anwendung aus Punkt 3.4.3.3 begründet.
Sie werden durch den Tag <aada:Logic>
eingeleitet, können if
-Zweige, switch
- bzw. trinary
-Anweisungen enthalten und ebenfalls rekursiv auftreten.
<aco:MetaInformation>....<aada:Logic>
<aada:Switch>
<aada:Expr><aada:Term type="is"><aada:UserParam>Endgerät</aada:Const></aada:Term></aada:Expr>
<aada:Cases><aada:Case value="Handy" res="text"/><aada:Case value="PC" res="bild"/></aada:Cases></aada:Switch>
</aada:Logic>...</aco:MetaInformation>
Die Umwandlung dieser Logiken findet im Mittelbereich der Pipeline innerhalb des evalLogic
- Transformators (früher Adaption.xsl
) statt.
Verwendeter Interpret
Gegenüberstellung von XSLT-Interpreten für Java auf verschiedenen Systemen, die durch den XSLTMark Benchmark erstellt wurden. XSLTMark wurde auf 200 Iterationen fuer jeden der 40 Testfälle angepasst.
Die Abarbeitungszeit einer Stylesheetbasierenden Transformation hängt stark von dem verwendeten XSLT-Interpreter ab. Daher können innerhalb der Cocoon-Umgebung XSLT-Skripte durch Pre-Kompilierung mit Xalan-C, einem Projekt der Apache Software Foundation, deutlich beschleunigt werden.
Dies beruht auf einer interne Verarbeitung des XML-Baumes als "Document Table Modell" (DTM) statt dem ressourcenverbrauchenden DOM. Die Pre-Kompilierung gestaltet sich in Form der Umwandlung von Stylesheets in Translets, welche aus Bytecode bestehen und in einer Laufzeitumgebung ausgeführt werden. Die Nutzung von C++ soll dabei höhere Geschwindigkeit und geringeren Speicherverbrauch gegenüber Java gewährleisten.
Durch Nutzung des kommerziellen Pre-Compilers"Gregor2 kann ein Stylesheet laut [Amb03] sogar um einen Faktor zwischen 3 und 9 gegenüber dem Standard-XSLTC beschleunigt werden. Eine interessante Übersicht weiterer XSLT-Interpreter findet man unter [Oio04].
Dennoch verspricht die Hartkodierung in einem Java-Transformator eine Beschleunigung um höhere Faktoren. Dies ist nicht in der reinen Pre-Kompilierung begründet, sondern ebenso in der Umwandlung einer funktionalen Programmiertechnik in die klassisch-objektorientierte Programmierweise.
Als Grundlage dieser Betrachtungen werden keine weiteren Test folgen, sondern in Kapitel 4.2 die bereits erfolgten Messergebnisse als Grundlage genutzt.
Zusammenfassung
Die Leistung des Gesamtsystems hängt, wie eben dargelegt, von der Leistung und der Anzahl entsprechender Interaktionen, Regeln und Transformator-Regeln ab. Demnach sollten für eine optimale Leistung die Anzahl der einzelnen Transformatoren gering gehalten werden und die Performance der genutzten Komponenten optimal sein.
Dazu müssen laut [CoP04] die Anzahl der Templates innerhalb der XSL-Translation gering gehalten werden. Ebenfalls können verschiedene Wege zum Ziel führen, so dass beispielsweise erhebliche Unterschiede durch Abarbeitungsreihenfolge von Templates auftreten können.
Es ist laut [CoP04] ein Leistungsabfall durch den massigen Gebrauch von globalen Variablen und Parametern zu erwarten. Dabei handelt es sich um Variablen der Form
<map:global-variables><skin>web/images/portal/</skin>
<files>web/portal/</files>
<trans>web/xsl/</trans>
</map:global-variables>
welche sich im Anfangsbereich der Sitemap befinden und an alle weiteren Unterpipelines, Generatoren, Transformatoren und Serializer weitergereicht werden. In dieser Rekursion ist auch der erhöhte Leistungsaufwand begründet.