UnrealEd wrote: > ik ben samen met een vriend een socket aan het schrijven, waarbij we de data > doorsturen in xml-formaat. Ik ben daarom begonnen met het schrijven van een > XML reader class, gebruik makend van de xml.minidom. Nu las ik op deze > website ( http://www-128.ibm.com/developerworks/library/x-matters28/ ) dat > de gnosis xml class veel sneller te werk gaat in het processen van xml data.
Enkele observaties (met excuses voor het gebrek aan een coherent verhaal): - Optimaliseer alleen wanneer nodig; laat je niet leiden door problemen die er (nog) niet zijn. Gemak van ontwikkeling en onderhoud zijn belangrijker, en je zult zien dat werkelijke performance problemen makkelijker op te lossen zijn wanneer je code goed in elkaar zit. Premature optimalisatie echter, leidt gemakkelijk tot meer problemen. - Benchmarks geven nooit een goed beeld van hoe een library in *jouw* applicatie presteerd. Als XML performance een bottleneck is, doe je eigen tests. De IT wereld kent zijn eigen gezegden, en 'Lies, damn lies and benchmarks' is daar één van. Bovendien is David Mertz' artikel al weer 3 jaar oud; er is veel veranderd in Python XML land sinds hij dat schreef. - Er zijn twee manieren om met XML om te gaan: als een event stream en als een boom. SAX parsers en dergelijke geven je een event stream ('start element', 'end element', enz.). Een DOM tree is een voorbeeld van de boom benadering. Tenzij je absoluut een boom nodig hebt, raad ik je aan een event stream benadering te gebruiken omdat dat sneller is en minder geheugen kost; een boom implementatie gebruikt teslotte zelf al een event stream om de boom in het geheugen op te bouwen. Gebruik alleen een boom indien je arbitraire toegang tot de XML gegevens nodig hebt. Let wel, ik zou zelf voor ElementTree of lxml kiezen tenzij ik sterke indicaties had dat geheugen of snelheid van belang zouden zijn; gemak van ontwikkeling en leesbaarheid telt zwaar. - W3C DOM is een verschrikkelijke interface, welke is ontworpen voor talen die veel rigider zijn dan Python (namelijk C++ en Java). Tenzij je de DOM ook naar externe niet-python omgevingen exporteert, is er geen enkele reden om die interface te gebruiken. Doe jezelf een plezier en gebruik ElementTree of lxml; pythonische interfaces voor de XML document boom. - Minidom een pure Python DOM implementatie, en implementeert slechts een subset van DOM level 2. Het is niet moeilijk om sneller en beter te zijn dan minidom. - ElementTree heeft een C implementatie voor snelheid, en lxml is al in pyrex (compileert naar C), test welke library sneller is (zie eerdere opmerkingen over benchmarks). - Vanaf python 2.5 is ElementTree onderdeel van de standaard python library. Martijn Pieters _______________________________________________ Python-nl mailing list Python-nl@python.org http://mail.python.org/mailman/listinfo/python-nl