Re: Slow performance

Trevor Squires
Fri, 30 Mar 2007 17:16:29 -0000

Hey,

So, are you saying that when you render the 5000 recipes using an
ordinary browser request it''s fast, but when you try to use AJAX to
update the page with 5000 recipes it''s much slower?

Doesn''t that seem sensible?  The AJAX response for stuff like
page.replace_html will be escaped so that it can be evaluated by
javascript (so it will be a larger over-the-wire transfer) *and* the
javascript engine will have to process the response...

Sounds to me like the solution is staring you in the face - don''t use
AJAX in the situations where it''s faster to just render the whole page.

HTH
Trevor

On 30-Mar-07, at 9:51 AM, Nik wrote:

>
> Hello Rob, Thank You Thank you Thank you for replying!!
>
> Sorry about my confusing writing. Here''s the improvement:
>
> So I have the FAST version like this:
>
> <% for i in Recipes.find(:all) %>
>   <%= i.ingredients %>
> <% end %>
> </body
>
> All ingredients from the 5,000+ recipes show up in less than 1.5
> seconds.
>
> Then I have this slow version like this:
>
> <%= link_to_remote "show ingredients", :update =>
"targetdiv", :url =>
> {:action => "showIngredients"} %>
>
>
>
>
> and in the controller:
> def showingredients
>   render :update do |page|
>     page.replace_html ''targetdiv'', :partial =>
''i'', :collection =>
> Recipes.find(:all)
>   end
> end
>
> And in the partial ''i'':
> <%= i.ingredients %>
>
>
>
> So that''s all. The slow version takes as much as 14 seconds
sometimes.
>
> Any ideas?
>
> On Mar 29, 5:50 pm, Rob Biedenharn
<R...-xa9cJyRlE0mWcWVYNo9pwxS2lgjeYSpx@public.gmane.org>
> wrote:
>> On Mar 29, 2007, at 8:16 PM, Nik wrote:
>>
>>
>>
>>> Hello all, I found a strange dilemma here:
>>
>>> I have a table of several thousand rows and I experimented with
>>> these
>>> two method to display them:
>>
>>> In this first method, I just put the follow in the view,
let''s call
>>> the view, display.rhtml
>>> <% for x in Cookbook.find(:all) %>
>>> <%= x.recipe %>
>>> <% end %>
>>> The page displays all 5000 recipes in less than 2 seconds. I am
>>> quite
>>> happy with it.
>>
>>> The second method, I put the find() business in the controller
>>> within
>>> a render :update do |page|.
>>
>>> def showrecipe
>>>    render :update do |page|
>>>      page.replace_html ''displaydiv'', :partial
=>
>>> ''recipe'', :collection
>>> => find(:all, conditions => ["cuisine = ?",
"italian"])
>>>  end
>>> end
>>
>>> This method, when called, takes forever.
>>
>>> ----> Can anyone be kind enough to hint why this is the case?
<--
>>
>>> Thank You!
>>
>> Hmm... no index on the `cuisine` column?  (I''m assuming that
you
>> really have :conditions as the : seems to be misssing.)
>>
>> Also, do you really want to push that much data back with rjs?  If
>> all you need is to update a div, use the :update option on your
>> link_to_remote.
>>
>> You also don''t say where the "forever" is taking
place, for example,
>> what does the log file contain?  (I don''t actually believe you
since
>> I''m never personally waited that long ;-)
>>
>> -Rob
>>
>> Rob Biedenharn          http://agileconsultingllc.com
>> R...-xa9cJyRlE0mWcWVYNo9pwxS2lgjeYSpx@public.gmane.org