That would definitely help, a large percentage of the conversion time is manually converting strings to utf-8 bytes and back again. Thanks for pointing that out.
Peter Schuck On Sun, Aug 3, 2014 at 9:14 AM, David Nolen <[email protected]> wrote: > RE: writing/reading strings I wonder if this won't help > https://plus.google.com/+AddyOsmani/posts/4GgX9CD6c1X? > > David > > On Sun, Aug 3, 2014 at 9:51 AM, Peter Schuck <[email protected]> wrote: > > Fressian's caching strategy is very flexible and powerful but doesn't > have a > > lot of documetnation. I view Fressian's caching as similar to memory > > references for Clojure values. You can cache any value no matter how > large > > and once the value is cached referencing it again is only a few bytes. > > Fressian caches symbols, keywords, and tagged value tags by default. > > > > What I mean by "significant structural similarity" is a data structure or > > steam of data structures that have frequent repetitions of compound > values. > > An AST would probably be a canonical example of this. > > > > Fressian is about five to ten times as slow as Transit and not really > suited > > for the vast majority of applications where relatively small data > structures > > need to be written and read as quickly as possible. It took significant > > effort to get Fressian's speed to where it is now and I don't see a way > > forward to get it to match Transit's speed. The main bottlenecks are > > reading and writing numbers and strings, hashing value, and determining > an > > value's type. Until those bottlenecks get resolved in future versions of > > JavaScript piggybacking of of JSON, like Transit, is the way to go for > > speed. > > > > I hope that answers most questions, feel free to ask for more > clarification. > > I learned a lot about how to write fast ClojureScript / JavaScript and > plan > > on writing a blog post about it in the near future. > > > > Peter Schuck > > > > > > On Sat, Aug 2, 2014 at 4:23 PM, Alex Miller <[email protected]> wrote: > >> > >> I took "significant structural similarity" to primarily mean at least > maps > >> with similar keys, which Transit caching will cover. > >> > >> > >> On Sat, Aug 2, 2014 at 1:49 PM, David Nolen <[email protected]> > >> wrote: > >>> > >>> In Transit, maps keys, symbols, keywords, and tagged value tags are > >>> subject to caching. > >>> > >>> Fressian's caching strategy is far more flexible from what I > >>> understand. That said transit-cljs is 20-30X faster than > >>> cljs.reader/read-string on the benchmarks I've tried across various > >>> browser and command line JS environments. > >>> > >>> David > >>> > >>> On Sat, Aug 2, 2014 at 2:26 PM, Sean Grove <[email protected]> wrote: > >>> > I thought transit's caching only applied to map keys? Pretty unclear > on > >>> > what > >>> > Fressian's can do > >>> > > >>> > > >>> > On Sat, Aug 2, 2014 at 8:23 AM, Alex Miller <[email protected]> > >>> > wrote: > >>> >> > >>> >> Cool stuff Peter. It would be interesting to compare performance > with > >>> >> transit-cljs https://github.com/cognitect/transit-cljs. Transit has > >>> >> the same > >>> >> caching and extensibility benefits of Fressian but leverages the > very > >>> >> fast > >>> >> JavaScript parser capabilities built into the browser, so is likely > >>> >> faster. > >>> >> > >>> >> Alex > >>> >> > >>> >> On Friday, August 1, 2014 3:33:58 PM UTC-5, [email protected] > >>> >> wrote: > >>> >> > I'm happy to announce a port of Fressian to ClojureScript. > >>> >> > > >>> >> > The public api mirrors data.fressian api with a few exceptions. > >>> >> > Records > >>> >> > don't have a generic writer but you can easily append the handlers > >>> >> > with the > >>> >> > write-record function. There is no inheritance lookup for types > so > >>> >> > every > >>> >> > different type will need it's own handler. The tagged helper > >>> >> > functions > >>> >> > (tagged-object?, tag, tagged-value) are not included. > >>> >> > > >>> >> > I see the use case for Fressian in ClojureScript streaming large > >>> >> > amounts > >>> >> > of data that has significant structural similarity. Fressian > >>> >> > caching > >>> >> > capabilities allow large values to be represented as a single > >>> >> > integer in the > >>> >> > bytestream. > >>> >> > > >>> >> > This is my first large ClojureScript library so any suggestions > for > >>> >> > improvements are welcome. > >>> >> > > >>> >> > Thanks to Bendyworks for letting me develop this during my work > >>> >> > hours. > >>> >> > > >>> >> > Clojars Link: https://clojars.org/longshi > >>> >> > Repo: https://github.com/spinningtopsofdoom/longshi > >>> >> > > >>> >> > Peter Schuck > >>> >> > >>> >> -- > >>> >> Note that posts from new members are moderated - please be patient > >>> >> with > >>> >> your first post. > >>> >> --- > >>> >> You received this message because you are subscribed to the Google > >>> >> Groups > >>> >> "ClojureScript" group. > >>> >> To unsubscribe from this group and stop receiving emails from it, > send > >>> >> an > >>> >> email to [email protected]. > >>> >> To post to this group, send email to [email protected] > . > >>> >> Visit this group at http://groups.google.com/group/clojurescript. > >>> > > >>> > > >>> > -- > >>> > Note that posts from new members are moderated - please be patient > with > >>> > your > >>> > first post. > >>> > --- > >>> > You received this message because you are subscribed to the Google > >>> > Groups > >>> > "ClojureScript" group. > >>> > To unsubscribe from this group and stop receiving emails from it, > send > >>> > an > >>> > email to [email protected]. > >>> > To post to this group, send email to [email protected]. > >>> > Visit this group at http://groups.google.com/group/clojurescript. > >>> > >>> -- > >>> Note that posts from new members are moderated - please be patient with > >>> your first post. > >>> --- > >>> You received this message because you are subscribed to a topic in the > >>> Google Groups "ClojureScript" group. > >>> To unsubscribe from this topic, visit > >>> > https://groups.google.com/d/topic/clojurescript/xhdrGunEXPE/unsubscribe. > >>> To unsubscribe from this group and all its topics, send an email to > >>> [email protected]. > >>> To post to this group, send email to [email protected]. > >>> Visit this group at http://groups.google.com/group/clojurescript. > >> > >> > >> -- > >> Note that posts from new members are moderated - please be patient with > >> your first post. > >> --- > >> You received this message because you are subscribed to a topic in the > >> Google Groups "ClojureScript" group. > >> To unsubscribe from this topic, visit > >> https://groups.google.com/d/topic/clojurescript/xhdrGunEXPE/unsubscribe > . > >> To unsubscribe from this group and all its topics, send an email to > >> [email protected]. > >> To post to this group, send email to [email protected]. > >> Visit this group at http://groups.google.com/group/clojurescript. > > > > > > -- > > Note that posts from new members are moderated - please be patient with > your > > first post. > > --- > > You received this message because you are subscribed to the Google Groups > > "ClojureScript" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to [email protected]. > > To post to this group, send email to [email protected]. > > Visit this group at http://groups.google.com/group/clojurescript. > > -- > Note that posts from new members are moderated - please be patient with > your first post. > --- > You received this message because you are subscribed to a topic in the > Google Groups "ClojureScript" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/clojurescript/xhdrGunEXPE/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/clojurescript. > -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/clojurescript.
