2013-07-10 12 views
8

Używam pakietu JSON w skrypcie perla, który analizuje długą listę relatywnie krótkich łańcuchów JSON i profilowałem proces z Devel :: NYTProf. Wygląda na to, że większość czasu zajmuje funkcja JSON string w procesie parsowania.przyspieszenie parsowania JSON w Perlu

Czy są jakieś przyspieszenia, których mogłem użyć, poza używaniem pakietu JSON i próbować go przyspieszyć przez samodzielne analizowanie?

EDYCJA: Pakiet JSON został zainstalowany w systemie przy użyciu cpanm. Jeśli są jakieś przyspieszenia, które można uzyskać poprzez optymalizację procesu instalacji, są również mile widziane.

+4

Czy 'JSON :: XS' jest zainstalowany w twoim systemie? – innaM

+3

'jeśli json :: xs nie jest dostępny, JSON używa obiektu JSON :: PP zamiast JSON :: XS i jest bardzo wolny jako czysty Perl." Z cpan docs dla modułu JSON – Suic

Odpowiedz

12

Spróbuj zainstalować JSON::XS. Następnie "używaj JSON" automatycznie używa wersji XS. Ten moduł został napisany w języku C i ma bardzo dobrą wydajność.

+0

Dzięki, to zrobiło ogromną różnicę . Wciąż jest o x2 wolniejsze niż regex, ale potężniejsze do zapytania za pomocą JSON. – 719016

+5

Powodem, dla którego jest wolniejszy od wyrażenia regularnego, jest prawdopodobnie to, że twoje wyrażenie regularne nie będzie w stanie przekształcić żadnego prawidłowego JSON w strukturę danych Perl. – innaM

0

Innym ciekawym obejście:

Jeśli potrzebujesz do analizowania JSON, dzięki czemu można extrat mniejsze kawałki z dużego obiektu JSON, a wspomniany cel JSON przychodzi poprzez webapp - po prostu analizować i pare dół JSON do mniejszego fragmentu w JavaScript przed wysłaniem go do Perla.

JS ma niezwykle szybki i skuteczny string-to-JSON parsera (Douglas Crockford's parser nie eval, żeby była jasność), nawet jeśli zaczynają się sznurkiem i nie JSON datastructure samego.