Unterschied zwischen newTransformer und newTemplates in Java XSLT-Transformationen

8

In Java von einem TransformerFactory für Erstellen von Objekten für die Verarbeitung von XSLT, und es hat die Methoden:

  • newTransformer , das Transformer -Objekt erstellt, das XML in ein Ergebnis umwandeln kann.
  • newTemplates , das Templates -Objekt erstellt, das ein Transformer erstellen kann.

In der Dokumentation zu Transformer heißt es ausdrücklich:

  

Ein Transformator kann mehrere Male verwendet werden.

Meine Anwendung verarbeitet verschiedene XMLs mit derselben XSLT. Zu Beginn des Programms verwende ich newTransformer , um ein Transformer zu erstellen, benutze es dann für alle XMLs (stelle sicher, dass es synchronisiert ist, also verwende ich es nur aus einem Thread und rufe seine reset() -Methode vor jeder Verarbeitung auf .).

Auf diese Weise entstehen mir keine Kosten für die Neukompilierung der XSLT für jeden XML-Prozess.

Was ist der Sinn des Objekts newTemplates und Templates ? Soll ich das stattdessen verwenden und ein neues Transformer -Objekt für jedes XML erstellen?

    
Adrian Smith 11.03.2011, 20:46
quelle

3 Antworten

6

Wenn Sie in einem einzelnen Thread laufen, werden Sie wahrscheinlich keinen großen Unterschied bemerken.

Die Leistung hängt immer von der Implementierung und nicht von der API-Spezifikation ab. Wenn Sie einen Transformer wiederverwenden, behält Saxon den Cache der Dokumente, die mit der Funktion doc () geladen wurden. Je nachdem, ob die nächste Transformation auf dieselben Quelldokumente zugreift, kann das gut oder schlecht sein. Allgemein rate ich dazu, für jede Transformation einen neuen Transformer zu verwenden, natürlich mit demselben Templates-Objekt.

    
Michael Kay 06.04.2011, 22:28
quelle
6

Der Hauptunterschied besteht darin, dass Templates Thread-sicher ist und Transformer nicht. Darüber hinaus bedeutet die Dokumentation, dass Leistungsoptimierungen während der Erstellung einer Templates -Instanz angewendet werden können. Die anfängliche Erstellung einer Templates -Instanz kann daher kostspieliger sein, aber die tatsächliche Verwendung kann zu Leistungssteigerungen führen. Wenn Sie die Synchronisierung und das Zurücksetzen bereits manuell verwalten müssen, würde ich sagen, Templates bittet um Ihre Aufmerksamkeit ...

    
kschneid 11.03.2011 21:14
quelle
4

newTemplates () kompiliert das Stylesheet zu einer internen Repräsentation, die wiederverwendet werden kann. Es entspricht dem Kompilieren einer interpretierten Sprache (wie Python), um den Bytecode zu bytecodieren und zu speichern, anstatt ihn jedes Mal neu zu interpretieren, wenn Sie ihn ausführen.

    
Jim Garrison 11.03.2011 21:12
quelle

Tags und Links