My 2 cents:

1. JSON transformation is of fundamental importance to many Clojure
applications.
2. Having the "standard" solution be blown away by a factor of 140x
for the sake of purity is not pragmatic.

If the user experience with contrib is to use it, realize its not
ready for prime time, and then go rummaging around through github for
better solutions made by people who've previously realized the same
thing, that is a fail. And makes one less likely to look to contrib
for default solutions to common problems.



On Thu, Oct 6, 2011 at 11:03 AM, Lars Nilsson <chamael...@gmail.com> wrote:
> The clojure.contrib.base64 discussion has inspired me (sorry!) to
> write this.. I would very much like to see a faster JSON parser be in
> contrib. clj-json can beat clojure.data.json by up to a factor of 140x
> when reading/parsing and 5x when creating a JSON string.
>
> clojure.data.json reading:
>
> (dotimes [_ 5] (time (read-json (slurp "foo.json"))))
> "Elapsed time: 105137.039484 msecs"
> "Elapsed time: 109517.590644 msecs"
> "Elapsed time: 114940.018075 msecs"
> "Elapsed time: 107612.194846 msecs"
> "Elapsed time: 104434.230607 msecs"
> nil
>
> clj-json reading:
>
> (dotimes [_ 5] (time (parse-string (slurp "foo.json") true)))
> "Elapsed time: 851.541746 msecs"
> "Elapsed time: 716.894466 msecs"
> "Elapsed time: 713.257132 msecs"
> "Elapsed time: 710.379671 msecs"
> "Elapsed time: 709.358592 msecs"
> nil
>
> clojure.data.json create string:
>
> (def foo (read-json (slurp "foo.json")))
> (dotimes [_ 5] (time (json-str foo)))
> "Elapsed time: 1546.511918 msecs"
> "Elapsed time: 1533.056017 msecs"
> "Elapsed time: 1534.136322 msecs"
> "Elapsed time: 1537.893503 msecs"
> "Elapsed time: 1555.343765 msecs"
> nil
>
> clj-json create string:
>
> (def foo (parse-string (slurp "foo.json")))
> (dotimes [_ 5] (time (generate-string foo)))
> "Elapsed time: 375.415311 msecs"
> "Elapsed time: 298.440444 msecs"
> "Elapsed time: 272.829368 msecs"
> "Elapsed time: 271.800466 msecs"
> "Elapsed time: 273.67808 msecs"
> nil
>
> The JSON file is about 217KB, with vectors containing a couple of
> thousand JSON objects with nested vector objects between 2-6 levels
> deep.
>
> Granted, clj-json uses a (presumably heavily optimized) Java library
> as the work horse, while clojure.data.json is pure Clojure. However, I
> feel the speed penalty is too big of a price to pay in this case. Now,
> I can use clj-json for my own parsing needs. However, something like
> clutch (couchdb library) that uses c.d.json behind the scenes may be
> paying a price in performance that I cannot easily overcome without
> hacking around inside it in order to swap JSON implementation, rather
> than tweaking my own code (although, in this case it may be limited to
> just the JSON string creation).
>
> Perhaps there are benefits (of which I'm not aware) to c.d.json that
> are not available in clj-json, but I'd be hard-pressed to come up with
> a scenario where I wouldn't pick the significant speed boost of
> clj-json.
>
> Lars Nilsson
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to