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?
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.
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 ...
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.