Re: New JSON parser

From: Date: Tue, 25 Mar 2014 07:47:09 +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

Zitat von Jakub Zelenka <[email protected]>:

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
Can you explain what exactly the following means in your documentation: "If the extension is compiled with defined macro PHP_JSOND_PRIMARY", or how to actually accomplish this? Maybe even for PECL builds? Thanks. -- Jan Schneider The Horde Project http://www.horde.org/ https://www.facebook.com/hordeproject

Thread (29 messages)

« previous php.internals (#73412) next »