2013-07-10 20 views
8

Ich habe das JSON-Paket in einem Perl-Skript, das eine lange Liste von relativ kurzen JSON-Strings analysiert und ich habe den Prozess mit Devel :: NYTProf profiliert. Es scheint, als ob die meiste Zeit von der JSON string Funktion im Parsing-Prozess belegt wird.Beschleunigung JSON Parsing in Perl

Gibt es irgendwelche Beschleunigungen, die ich verwenden könnte, anstatt das JSON-Paket nicht zu verwenden, und versuche, es zu beschleunigen, indem ich es selbst analysiere?

BEARBEITEN: Das JSON-Paket wurde mit cpanm im System installiert. Wenn es durch die Optimierung des Installationsprozesses zu einer Beschleunigung kommt, sind sie auch willkommen.

+4

Ist 'JSON :: XS' auf Ihrem System installiert? – innaM

+3

'Wenn json :: xs nicht verfügbar ist, verwendet JSON ein JSON :: PP-Objekt anstelle von JSON :: XS und es ist sehr langsam als pure-Perl." Aus cpan docs für JSON-Modul – Suic

Antwort

12

Versuchen Sie, JSON::XS zu installieren. Dann verwendet "JSON verwenden" automatisch die XS-Version. Dieses Modul wurde in C geschrieben und es hat eine sehr gute Leistung.

+0

Danke, das machte einen großen Unterschied . Es ist immer noch etwa 2 mal langsamer als eine Regex, aber leistungsfähiger, um mit JSON abzufragen. – 719016

+5

Der Grund, warum es langsamer ist als Ihr regulärer Ausdruck, ist wahrscheinlich, dass Ihr regulärer Ausdruck keine gültige JSON in eine Perl-Datenstruktur umwandeln könnte. – innaM

0

Eine weitere interessante Lösung:

Wenn Sie JSON analysieren müssen, so dass Sie kleinere Stücke von einem großen JSON-Objekt extrat können, und die JSON-Objekt über eine Webapp kommt - einfach analysieren und die JSON zu kleineren Brocken abspecken in das JavaScript vor dem Senden an Perl.

JS hat erstaunlich schnelle und effiziente String-to-JSON Parser (Douglas Crockford's parser, nichteval, nur klar zu sein), auch wenn Sie mit einem String beginnen und nicht JSON Datenstruktur selbst.