jaki jest najszybszy sposób parsowania pliku xml o wielkości ok 50 kB? Ktoś kiedyś się spotkał z testami wydolnościowymi bibliotek?
gdzieś na stacku. odpowiedź brzmi to zależy
"In summary, we can conclude that choosing from the two approaches studied for processing XML documents depends mostly on project’s requirements."
http://sdiwc.net/digital-library/download.php?id=00000582.pdf (tylko to zdanie przeczytałem ;p)
także jak nie masz jakichś specyficznych wymagań projetowych to przy plikach 50kB raczej nie ma znaczenia.
Ogólnie jak się pytali co wybrać to mówiłem, że jak duży plik to SAX a jak mniejszy to DOM (ale chodziło o zajęcie pamięci podczas przetważanie)
w tych wszystkich odpowiedziach co widziałem, zawsze był tworzony obiekt dla konkretnego xml. Czy jest jakiś bardziej generyczny sposób, żeby parsować plik bez tworzenia dla niego obiektu?
Napisałem najpierw odpowiedź z głowy, ale potem poszukałem. I okazuje się, że - jak zwykle - to zależy :)
Przy tak postawionym pytaniu, o prędkość parsowania, to SAX bije DOM na głowę.
Pełne pomiary: A Comparative Study and Benchmarking on
XML Parsers, by Su Cheng Haw, G. S. V. Radha Krishna Rao.
Ale pytanie nie jest raczej dobrze postawione. Bo oprócz parsowania coś chcesz z tymi danymi zrobić. A w zależności od selection rate wyniki mocno się zmieniają. I tak przy selection rate 25% (czytasz i przetwarzasz tylko 25% danych, resztę przeskakujesz), oba narzędzia mają podobną wydajność (throughput), dla małych plików. No a przy selection rate 100%, DOM jest szybszy 5-krotnie! Zaskakujące jak dla mnie.
Uważać trzeba na rozmiar pliku. W którymś momencie SAX pokona DOM niezależnie od selection rate. Bo czas przetwarzania SAX-em jest zawsze proporcjonalny do rozmiaru pliku, a przy DOM-ie rośnie szybciej (kwadratowo?). No chyba że robimy coś niedobrego z tym dużym plikiem, np. zbieramy wszystko w pamięci robiąc to samo co DOM.
Przykład parsowania stremowego: Parsing XML with SAX.
Co zatem robić? Jedyny sposób zrealizować oba sposoby i zmierzyć. Ja bym robił w ciemno SAX-em, właściwie zawsze. Nawet myślałem, że pytanie jest banalne, no-brainer. A tu się okazuje, że można w ten sposób wtopić, przetwarzać 50 kB przez 5 sekund zamiast 1 sekundy. Chyba że kolesie pomylili się w pomiarach. Albo ja w interpretacji :)
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.