views:

297

answers:

3

What do you think guys? I currently using SimpleXML for my entire project, which have average of 250KB in memory usage w/ 500micro seconds processing per execution. I just plan to switch to XMLParser, your advice is much appreciated.

Edit : The actual microtime is 0.000578 micro seconds. Im just confused in milli and micro, lol.

+2  A: 

In theory at least, XMLParser (a SAX implementation) can be more efficient (speed-wise, but especially memory-wise) than SimpleXML (a DOM implementation), particularly when dealing with larger documents (DOM implementations load the entire XML tree into memory, which can be taxing on resources, whereas SAX implementations allow the programmer to simply traverse the XML without necessarily storing anything in memory, leaving entirely up to you what, if anything, you want to retain in memory) -- see benchmarks comparing various DOM to various SAX parser implementations.

I say can because performing SAX traversal is programatically more complex than traversing or querying the DOM, and a poor use of SAX (or use of SAX in situations where DOM would be better suited anyway, e.g. if at the end of your SAX traversal you ended up loading yourself virtually the entire tree in memory) can actually result in poorer performance than the use of a DOM API.

Cheers, V.

vladr
Thanks for the info, I will try XML Parser.
PHPWDev
+1  A: 

Yes, XML Parser (not to confuse with XMLParser ) is preferred if you have memory concerns, because it doesn't require the whole file to be pre-loaded and pre-parsed before use. It's like fgets() or fread() compared to file_get_contents()

stereofrog
Thanks for the input, but here my scenario, a 500KB XML file needed to be loaded and convert to array all at once, that is because everything in 500kb is important information needed to be extracted. What do you think?
PHPWDev
A: 

In most cases, XML Parser will be much slower both in terms of development and execution, mainly because you have to write/execute tons of userland PHP code to navigate/read your document.

In some cases, you can find some improvement using XMLReader (not sure about XML Parser) but the cost is extra development time and harder maintenance. Since your application already uses SimpleXML and only uses 250 KB, your time will most likely be better spent on other areas of your application. 500ms seems quite a lot for some XML processing with SimpleXML, you should profile that and/or post your most CPU-intensive routine in another question for optimization.

Josh Davis
Yeah, i just profiled two script, using XMLParser and SimpleXML in same machine. Its just seems the same, because for XMLParser, I need to reinvent the wheel for array mapping. And array consumes memory. SimpleXML is array ready, so does consumes too.Though SimpleXML uses less coding, thus much faster execution. I used 600KB xml file, and needed to load to memory all at once. So seems SimpleXML is better, but if i need to load just part of xml file, then XMLReader or XMLParser is way better.
PHPWDev