I am overriding "as_json" and calling that in my controllers to define what
records I'm getting, but Lachie mentioned, I think I'm being far too
aggressive in what I'm fetching from the database. Going to take a look at
scaling that back. Rabl does look nice though, just nice enough to rewrite
things, maybe after I've got things live :)

Samuel Richardson
www.richardson.co.nz | 0405 472 748


On Tue, May 24, 2011 at 6:30 PM, Paul Annesley <[email protected]>wrote:

>  This came up recently, could be relevant:
>
> http://engineering.gomiso.com/2011/05/16/if-youre-using-to_json-youre-doing-it-wrong/
>
> The upshot is that they built this:
> https://github.com/nesquena/rabl
>
> Cheers,
> Paul
>
>  On Tuesday, 24 May 2011 at 6:09 PM, Lachie wrote:
>
> Hey Samuel
>
> On Tue, May 24, 2011 at 4:42 PM, Samuel Richardson <[email protected]>
> wrote:
>
> Hi List,
> I've been struggling with a particular dynamic bit of JSON rendering that's
> fairly slow on my website. A typical render would be:
> Completed 200 OK in 1408ms (Views: 279.4ms | ActiveRecord: 148.8ms |
> Sphinx:
> 0.0ms)
>
>
> Looks like you're dumping out whole Genre models with lots of
> descriptive text, plus their children (e.g. medias including their
> descriptive text).
> However, in that list you're only using a couple of things from them
> (name, slug).
>
> This is resulting in ~250kb transferred for a list of 10 links. If
> nothing else, cutting down the amount of json you're encoding and
> sending will speed things up immensely.
>
> In your Genre model, you could override #as_json to send only the
> fields you need. YMMV, especially when you need different json in
> different situations, but it seems worth it here!
>
>
> The view and ActiveRecord aren't too bad but the total time is awful.
> Nearly
> 1.5 seconds. I thought for a while that it might have been my JSON encoding
> so I added the "yajl-ruby" gem to my Gemfile under the assumption that
> Rails
> would pick this up and use it automatically (it uses C bindings instead of
> pure Ruby for encoding) but it didn't seem to have an effect.
> I've also bumped my Rails version to 3.0.7, using MySQL in the backend
> hoping that later point release might have helped.
>
>
> I'm not totally sure where the discrepancy is coming from, but
> serialising and sending 250k of json will take a while no matter what
> :)
>
> You can verify your json backend by inspecting
> ActiveSupport::JSON.backend
>
> If you want to make sure that Rails really is picking up yajl, set it
> (e.g. in an initialiser) with
> ActiveSupport::JSON.backend = 'yajl'
>
>
> hth
> :lachie
>
> If you want to see the behaviour in action, you can load up:
> http://beta.knowyourgenre.com and have a play flicking backwards and
> forwards in the popular genres section down the bottom of the page. You'll
> also notice that the unpopular genres section, which has no songs, is quite
> a bit faster, so whatever is causing it is related to the number of songs.
> I've dumped out a log of the queries etc used to generate that chunk. For
> all I know that could be the problem but I don't think it is due to AR only
> report 100ms or so to run.
> www.richardson.co.nz/render.txt
> What I'm after here is what should I be looking at for debugging? JSON
> encoding, slow ActiveRecord or something else?
>
> Samuel Richardson
> www.richardson.co.nz | 0405 472 748
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby or Rails Oceania" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/rails-oceania?hl=en.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby or Rails Oceania" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/rails-oceania?hl=en.
>
>
>   --
> You received this message because you are subscribed to the Google Groups
> "Ruby or Rails Oceania" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/rails-oceania?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
or Rails Oceania" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rails-oceania?hl=en.

Reply via email to