Mitleser 2.0: Messergebnisse CSV vs. JSON

Beitrag lesen

Irgendwie fand ich den Gedanken „wenn Deine Seite nicht jedesmal beim Aufruf das New Yorker Telefonbuch mitliefert“ ja interessant, also habe ich was gebastelt…

Zunächst findet man das New Yorker Telefonbuch als CSV recht schnell im Netz. War mir mit über 500K Datensätzen und 180 Megabyte aber etwas drüber für einen Test. Also das Teil auf (produktiv für einen Ajax-Call immer noch absurd viel) 2000 Einträge reduziert.

Um daraus nun ein JSON zum Vergleich zu bekommen, habe ich https://csvjson.com/ zur Hilfe genommen.

Im Ergebnis kommt dabei natürlich, wie von Linuchs befürchtet, ein fürchterlicher Overhead heraus. Das CSV ist ca. 1,8 Megabyte groß und das JSON ca. 6,5 Megabyte.

Liefert der Webserver die beiden Kandidaten aber komprimiert (in meinem Test gzip) aus, entschärft sich die Situation deutlich: CSV ca. 130 Kilobyte, JSON ca. 190 Kilobyte. Wie schon erwähnt, mit absurden Datenmengen, aber sonst lässt sich das halt nicht vernünftig messen.

Jetzt zur Verarbeitung. Getestet im Firefox und Chrome, die Ergebnisse sind ähnlich. Wenn ich das CSV als String einfach nur auf Linefeeds und in einer Schleife dann auf Komma splitte, um einen Gesamtarray zu bilden, den ich nachfolgend dann auf „length“ in die Console printe, dann liegt CSV im Vergleich zu „JSON.parse(data).length“ ca 10ms vorne. Chrome ist erwartungsgemäß insgesamt schneller. Im Firefox komme ich hier beim CSV auf ca. 15ms, bei JSON auf ca 25ms. Rein von der Performance liegt CSV also bislang vorne.

Nur ist das simple Split auf Linefeeds und Komma bei CSV ja geradezu naiv und fehleranfällig. Also braucht man einen Parser. Im Gegensatz zu JSON gibt es den aber nicht nativ implementiert. Laut eigener Aussage ist hier Papa Parse „the fastest in-browser CSV parser for JavaScript“. Macht wirklich einen ausgereiften Eindruck und ist beeindruckend schnell.

Dennoch wendet sich hier das Blatt und das native „JSON.parse“ ist ca. 30% schneller. Trotz des ca. 3-fachen, zu verarbeitenden Datenvolumens.

Damit kann man hier mit „klawischniggs Fazit“ schließen: „dann fällt vermutlich nicht nur mir kein Grund ein, warum man kein JSON-Format verwenden sollte...“

JSON ist schneller, robuster und handlicher.