Re: Slow performance

Rob Biedenharn
Fri, 30 Mar 2007 17:10:26 -0000

On Mar 30, 2007, at 12:51 PM, 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?

Have you looked at this with Firefox and Firebug?  You should be able
to see how long the request takes.  Then I''d see what changing to:

def showingredients
   render :update do |page|
     page.replace_html ''targetdiv'', :partial =>
''i'', :collection =>
Recipes.find(:all, :limit => 10)
   end
end

does to the timing.

Actually, do you even get the right result after you wait for it?
You have :update => "targetdiv", but then you''re sending
the
javascript to do the replace.  If you want to keep the :update,
change the controller to be just:

def showingredients
   render :partial => ''i'', :collection =>
Recipes.find(:all, :limit
=> 10)
end

Hope that helps.

-Rob


> 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

Rob Biedenharn		http://agileconsultingllc.com
Rob-xa9cJyRlE0mWcWVYNo9pwxS2lgjeYSpx@public.gmane.org