Re: New JSON parser

From: Date: Fri, 14 Mar 2014 08:48:07 +0000
Subject: Re: New JSON parser
References: 1  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
really great! 

thanks for the work!

Sent from my iPhone

> On Mar 14, 2014, at 3:48 AM, Jakub Zelenka <[email protected]> wrote:
> 
> Hi,
> 
> I have create a new JSON parser using conditional re2c and pure pull Bison
> parser. It's a native UTF-8 parser licensed under PHP license (it can be
> used for Evil though :) ). The extension is available at
> 
> https://github.com/bukka/php-jsond
> 
> The encoder is taken from the current ext/json but the decoder has been
> completely rewritten.
> 
> I have done some basic benchmarks (the results are on the README.md page).
> For short strings the results are almost the same (the new parser is
> usually slightly faster) but there is a big difference for longer strings.
> For example for string with 800 characters the new parser is 4 times
> faster. If the string is longer, the results are even better. It's also
> much faster for big arrays. For example decoding json_encode($_SERVER) is
> twice faster with the new parser.
> 
> In addition to the speed improvements there also is a big memory saving.
> The old parser converts every serialized string to UTF-16 which requires
> additional memory. Although the memory is freed after the parsing, it can
> be problematic if the memory_limit is set. The new parser parses supplied
> string and no extra memory for conversion is allocated.
> 
> I need to do more testing before creating RFC for replacing the current
> parser. There is still space for further improvements. If anyone has any
> ideas, please let me know. Or if you could test it, that would be great
> too! ;)
> 
> I haven't finished the build config (it's working but it's not auto rebuild
> when you change *.y or *.re files). Need to figure out how to add
> Makefile.frag for bison and re2c . It's not working when I add
> PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Makefile.frag)
> $ make
> make: *** No rule to make target jsond.lo', needed by jsond.la'.  Stop.
> Has anyone got any idea? :)
> Also there is no build for Win atm as I don't have Windows... :( Hopefully
> someone will do it for me... :)
> 
> Thanks
> 
> Jakub


Thread (29 messages)

« previous php.internals (#73147) next »