warum sax-parsing ist schneller als dom Parsen ? und wie funktioniert stax Arbeit?
etwas im Zusammenhang zu: libxml2 von java
ja, diese Frage ist eher zu umständlich - sorry. Hielt ich ist als Dicke als ich spürte, wie möglich. Ich Fett die Fragen, um die es leichter machen, einen Blick auf, bevor Sie Lesen die ganze Sache.
Warum ist sax-parsing ist schneller als dom Parsen? Das einzige, was ich mit oben kommen kann ist, dass w/sax sind Sie wahrscheinlich ignorieren die meisten der ankommenden Daten, und damit keine Zeit verschwenden, Verarbeitung von teilen des xml, das Sie nicht kümmern. IOW - nach dem Parsen w/SAX, Sie können nicht neu erstellen, die ursprüngliche Eingabe. Wenn Sie schrieb Ihre SAX-parser so, dass es entfielen auf jeden xml-Knoten (und damit der Wiederherstellung der ursprünglichen), dann würde es nicht schneller als DOM würde?
Den Grund ich Frage ist, dass ich versuche zu Parsen von xml-Dokumenten schneller. Ich brauche Zugriff auf die gesamte xml-Struktur NACH dem Parsen. Ich Schreibe eine Plattform für 3rd-party-services, plug-in, so kann ich nicht vorhersehen, welche Teile des xml-Dokuments benötigt werden und welche Teile nicht. Ich weiß gar nicht, wie die Struktur der eingehenden Dokument. Dies ist der Grund, warum ich kann nicht mit jaxb oder sax. Arbeitsspeicher ist kein Problem für mich, weil die xml-Dokumente sind klein und ich brauche nur 1 im Speicher. Es ist die Zeit, die zum Parsen dieses relativ kleine xml-Dokument, das mich zu töten. Ich habe nicht verwendet stax vor, aber vielleicht brauche ich, um weiter zu untersuchen, da es möglicherweise einen Mittelweg? Wenn ich das richtig verstehe, stax hält die ursprüngliche xml-Struktur und-Prozesse, die Teile, die ich bitte für on-demand? Auf diese Weise, den ursprünglichen parse-Zeit kann schnell sein, aber jedes mal, wenn ich bitten es zu durchqueren ist Teil der Struktur, die er noch nicht Durchlaufen, das ist, wenn die Verarbeitung erfolgt?
Wenn Sie einen link, das beantwortet die meisten der Fragen, die ich akzeptiere Ihre Antwort (die Sie nicht haben, um direkt meine Fragen beantworten, wenn Sie schon beantwortet anderswo).
update: ich schrieb es in sax und analysiert die Dokumente auf avg 2.1 ms. Dies ist eine Verbesserung um 16% schneller) über die 2,5 ms, wurde dom unter, aber es ist nicht die Größenordnung, die ich (et al) hätte geahnt,
Dank
InformationsquelleAutor der Frage andersonbd1 | 2010-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie tun nichts, sondern analysieren das Dokument, die Rangfolge der verschiedenen parser-Normen ist wie folgt:
1. StAX ist der Schnellste
2. SAX ist neben
3. DOM ist der Letzte
Ihren Fall
InformationsquelleAutor der Antwort Blaise Doughan
DOM-parsing erfordert, dass Sie laden Sie das gesamte Dokument in den Speicher und dann queren, einen Baum zu finden, die Informationen, die Sie wollen.
SAX benötigt nur so viel Speicherplatz, wie Sie benötigen, um einfache IO, und Sie können extrahieren Sie die Informationen, die Sie brauchen, wie Sie das Dokument gelesen wird. Da SAX ist stream-orientiert, Sie können sogar eine Datei, die noch geschrieben wird von einem anderen Prozess.
InformationsquelleAutor der Antwort mikerobi
SAX ist schneller, da DOM-Parser verwenden oft ein SAX-parser zum Parsen ein Dokument intern, dann tun die extra-Arbeit erstellen und manipulieren von Objekten zu repräsentieren, die jede und jeder Knoten, selbst wenn die Anwendung kümmert sich nicht um Sie.
Eine Anwendung, die SAX direkt wahrscheinlich nutzen die Informationen effizienter als ein DOM-parser".
StAX ist ein glückliches medium, in dem eine Anwendung bekommt eine bequemer API als SAX-event-driven Ansatz, aber doch nicht so leiden die Ineffizienz der Erstellung eines kompletten DOM.
InformationsquelleAutor der Antwort erickson
SAX ist schneller als DOM (in der Regel fühlte sich beim Lesen von großen XML-Dokumenten), weil SAX gibt Ihnen die Informationen als eine Folge von Ereignissen (in der Regel der Zugriff erfolgt über eine handler), während die DOM-Knoten erstellt und verwaltet, die für das erstellen von Knoten-Struktur bis zu einem DOM-Baum vollständig erstellt (wie dargestellt in das XML-Dokument).
Für relativ kleine Dateien, werden Sie nicht das Gefühl haben, die Wirkung (außer, dass eventuell die zusätzliche Verarbeitung erfolgt durch den DOM zum erstellen von Knoten-element und/oder die Knoten-Listen).
Kann ich nicht wirklich kommentieren, StAX, seit ich ' ve nie gespielt mit ihm.
InformationsquelleAutor der Antwort Buhake Sindi