XSLT-Dokument (): Ist es langsamer, wenn es mehrmals aufgerufen wird?

8

UPDATE 17.Juli.2013 :
XALAN 2.7 speichert keine document() Aufrufe innerhalb einer Anfrage. Daher ist es wichtig, jedes benötigte Dokument in einer Variablen im XSL zu speichern.

Ich habe lange gesucht und keine konkreten Antworten auf meine einfache Frage gefunden:

Welcher Ansatz ist schneller oder ist der Compiler "intelligent" genug, so dass beide Varianten gleich sind?

Hinweis: Ich verwende Xalan 2.7 (Standardimplementierung in JDK 1.6):

1) Ich muss eine Eigenschaft in einem externen XML lesen:

%Vor%

Wenn ich die Stadt brauche, benutze ich den obigen Ausdruck (sagen wir mal 100 mal)

2) Anstatt das Dokument () 100 Mal aufzurufen, speichere ich den XML-Knoten in einer Variablen:

%Vor%

Und dann benutze ich 100 mal

%Vor%

Welcher ist schneller, besser, aus welchen Gründen? Danke!

    
basZero 10.05.2011, 07:33
quelle

2 Antworten

3

Beide Methoden sollten zur gleichen Zeit ausgeführt werden, wenn ein XSLT-Prozessor nicht naiv ist , weil die Dokumentfunktion das gleiche Ergebnis liefern sollte, wenn sie mit denselben Argumenten aufgerufen wird, egal wie viele Male.

Beide Methoden sind nicht effizient , da die Abkürzung // verwendet wird, wodurch der gesamte Dokumentbaum durchlaufen wird.

Ich würde Folgendes als effizienter empfehlen, als beide Methoden diskutiert werden:

%Vor%

dann nur Referenz $vCities .

Auf diese Weise haben Sie das Dokument nur einmal durchlaufen.

    
Dimitre Novatchev 10.05.2011, 13:42
quelle
2

Es scheint, dass Sie die beteiligten Prinzipien verstehen, also brauchen Sie dort keine Erklärungen.

Wenn Sie wissen wollen, wie Xalan 2.7 es tut, wird die definitive Antwort gefunden, indem Sie es mit Xalan 2.7 testen, mit einem ausreichend großen Test.

Wie @Dimitre bemerkt hat, ist keines davon wegen der // notwendigerweise effizient, obwohl einige Prozessoren schlau sind, diese Pfade zu optimieren, um das Problem zu mildern. Sie könnten dem Prozessor dabei helfen, effizienter zu arbeiten, indem Sie das Element city in einer Variablen belassen:

%Vor%

Ich habe [1] zur weiteren Optimierung hinzugefügt, weil du "die Stadt" gesagt hast (d. h. du erwartest nur eine), und dies erlaubt einem intelligenten Prozessor, nach dem ersten city Element zu stoppen.

    
LarsH 10.05.2011 15:35
quelle

Tags und Links