Forum: Ruby on Rails Ajax call really slow...

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
E0ef3d48c102ee1702fc0761bbe6eb50?d=identicon&s=25 Matt G (Guest)
on 2007-04-11 05:58
(Received via mailing list)
Hey Guys,

I'm fairly new to Rails, so my guess is that I'm just doing this
wrong.  I have a site that I'm building that uses ajax to update a
list of items depending on what tab a user clicks.  Unfortunately, it
isn't live yet so I can't send a link directly to the site, but I have
it all working using straight HTML/JS/XML.  Where the problems start
is when I try to use Rails to generate the update.

At first I tried to use RJS to push a partial template that loops
through each item to generate the html block that I need to push to
the list.  I figured this would be easy and straight forward, but even
though I only have 2 items in the DB currently (will eventually be
hundreds) the list was taking 2+ seconds to update even locally.  I
even tried changing my technique to use :update on a link_to_remote
instead of the RJS template with no increase performance.

Next I tried leaving the javascript that I was using before in place,
but used a partial template to build the xml file that was requested.
This seemed to help the performance, but I still wasn't able to
decrease the load time to an acceptable amount.

Lastly, I'm trying to use an rxml template to build the xml instead of
looping within a partial template:

xml.items do
  for p in @products
    xml.item(:tags => p.tags, :id => p.id) do
      xml.title(p.title)
      xml.subtitle(truncate(p.description, 100))
      xml.summary(truncate(p.description, 100))
      xml.description(p.description)
      xml.postedby("Lance 43", :id=>"12343")
      xml.postedtimestamp("1144537625")
      xml.images do
        xml.image(:id=>1) do
          xml.fullsize(p.image)
          xml.small(p.image_small)
          xml.thumb(p.image_thumb)
        end
      end
      xml.trashed("990")
      xml.reported("34")
      xml.views("1000")
      xml.score(p.overall_score)
      xml.points("40")
      xml.stars("5")
      xml.links do
        xml.link("link 1", :id=>"1", :href=>"http://www.link1.com")
        xml.link("link 2", :id=>"2", :href=>"http://www.link2.com")
      end
      xml.comments do
        xml.comment(:id=>"1") do
          xml.postedby("Ross C.", :id=>"123")
          xml.postedtimestamp("1144537625")
          xml.content("This item works well elit, sed diam nonummy
nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Ut wisi enim ad minim veniam, quis")
        end
        xml.comment(:id=>"2") do
          xml.postedby("Peter J.", :id=>"356")
          xml.postedtimestamp("1144537172")
          xml.content("Made some fixes to the wording and did some
other cleaning up. Man people sure spell bad. We should get a grade 10
class to go through this as a challenge.")
        end
      end
    end
  end
end

Most of the above is still static as I haven't updated the database
schema yet to include a lot of the fields.  I want to try to get this
up and running properly before I go any further on other development.

This seems to get an initial load time of about a second, but then it
caches and goes blazingly fast.  I'm currently on Dreamhost, and am
wondering if the slowness may be a factor of the host and not the
code.

Please guys, any help would be GREATLY appreciated as I'm getting
close to ditching rails for this project all together and moving back
to PHP.

Matt
Ef0db53920b243d6758c2f6b1306df0d?d=identicon&s=25 Steve Ross (cwd)
on 2007-04-11 06:05
(Received via mailing list)
What kind of server are you running this on? 2+ seconds sounds like some
flavor of CGI.


Matt G-2 wrote:
>
> This seemed to help the performance, but I still wasn't able to
>       xml.summary(truncate(p.description, 100))
>       xml.trashed("990")
>         xml.comment(:id=>"1") do
> other cleaning up. Man people sure spell bad. We should get a grade 10
>
>
>
> >
>
>

--
View this message in context:
http://www.nabble.com/Ajax-call-really-slow...-tf3...
Sent from the RubyOnRails Users mailing list archive at Nabble.com.
E0ef3d48c102ee1702fc0761bbe6eb50?d=identicon&s=25 Matt G (Guest)
on 2007-04-11 06:16
(Received via mailing list)
It's a standard Dreamhost package so Apache with FastCGI and MySQL
4.x.  Do you think it is a problem with the host then?  I'm loath to
try a new host in case it is just a simple code issue.  I seem to be
able to do much more complex queries in a fraction of a second using
PHP on the same server.

Matt
Ef0db53920b243d6758c2f6b1306df0d?d=identicon&s=25 Steve Ross (cwd)
on 2007-04-11 06:30
(Received via mailing list)
Host shouldn't be a problem. What do your logs tell you about where the
time
is going. Can you tail your production.log and watch as you hit it?
You're
describing "hello world" Ajax that's taking waaaaay too long. There has
to
be something more.


Matt G-2 wrote:
> On Apr 10, 9:04 pm, "s.ross" <cwdi...@gmail.com> wrote:
>> > wrong.  I have a site that I'm building that uses ajax to update a
>> > even tried changing my technique to use :update on a link_to_remote
>> > xml.items do
>> >           xml.fullsize(p.image)
>> >       xml.links do
>> >         end
>> > end
>> > Please guys, any help would be GREATLY appreciated as I'm getting
>
> >
>
>

--
View this message in context:
http://www.nabble.com/Ajax-call-really-slow...-tf3...
Sent from the RubyOnRails Users mailing list archive at Nabble.com.
E0ef3d48c102ee1702fc0761bbe6eb50?d=identicon&s=25 Matt G (Guest)
on 2007-04-11 06:54
(Received via mailing list)
Here's the latest from my logs.  It seems to be a little faster right
now, but I figure that's due to a lack of traffic on the hosting
server, or with my connection:

Completed in 0.05424 (18 reqs/sec) | Rendering: 0.01482 (27%) | DB:
0.00679 (12%) | 200 OK

Sorry, I don't have much experience looking through the logs, so I'm
not sure if those are high or on par with what they should be.
Looking at firebug, the "GET" for the XML can take between 4000+ to
9000+ms when I first hit it.
Ef0db53920b243d6758c2f6b1306df0d?d=identicon&s=25 Steve Ross (cwd)
on 2007-04-11 07:00
(Received via mailing list)
Not blindingly fast, but not alarmingly slow. While these log entries
are not
precise, they suggest a far faster turnaround of a request than what you
are
experiencing. Is your initial pageload fast? Do static pages load fast?
Doesn't this seem like latency?


Matt G-2 wrote:
> not sure if those are high or on par with what they should be.
>> be something more.
>>
>>
>> >> > through each item to generate the html block that I need to push to
>> requested.
>> >> >       xml.title(p.title)
>> >> >         end
>> >> >       end
>> >> >           xml.postedby("Peter J.", :id=>"356")
>>
>> >> > code.
>> >>
>
>

--
View this message in context:
http://www.nabble.com/Ajax-call-really-slow...-tf3...
Sent from the RubyOnRails Users mailing list archive at Nabble.com.
E0ef3d48c102ee1702fc0761bbe6eb50?d=identicon&s=25 Matt G (Guest)
on 2007-04-11 07:12
(Received via mailing list)
That's the kicker.  When I leave this as a static page loading static
XML files (whith 10 or more entries instead of the 2 that are being
generated) the calls are almost instant.  The page loads with no
slowness, and the tabs switch really fast.  Blazingly fast when
compared to the Rails render.

Can you notice anyting that I'm doing with my code that'd be causing
this slowness?  The code that I first posted is in the  callxml.rxml
file, and the following is in the controller:

  def callxml
    @order_by = 'overall_score desc'
    @products = Product.find(:all, :order=>@order_by, :limit => '3')
  end

At this point, I'm thinking of trying a host with a money back clause
to try if they are any better with the sped for generating the XML.
If it does show improvement, I'll just keep my site on that host and
continue my development.  Otherwise I'll cancel it and convert
everything to PHP and call 'er a day.

Matt
Ef0db53920b243d6758c2f6b1306df0d?d=identicon&s=25 Steve Ross (cwd)
on 2007-04-11 08:11
(Received via mailing list)
Can you paste your .htaccess?

I betcha it says:

RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

To use FCGI, you need:

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

If this is the case, then problem solved, but you should consider using
Apache to balance mongrels or a proxy setup that will allow you to use
mongrel_cluster (pound or pen).



Matt G-2 wrote:
> file, and the following is in the controller:
> everything to PHP and call 'er a day.
>>
>>
>> >> You're
>> >> > able to do much more complex queries in a fraction of a second using
>>
>> >> >> > it all working using straight HTML/JS/XML.  Where the problems
>> >> >> > hundreds) the list was taking 2+ seconds to update even locally.
>> >> >> > decrease the load time to an acceptable amount.
>> >> >> >       xml.subtitle(truncate(p.description, 100))
>> >> >> >       end
>> :href=>"http://www.link2.com")
>> >> >> >         end
>> >> >> >       end
>>
>> >> back
>>
>
>
> >
>
>

--
View this message in context:
http://www.nabble.com/Ajax-call-really-slow...-tf3...
Sent from the RubyOnRails Users mailing list archive at Nabble.com.
E0ef3d48c102ee1702fc0761bbe6eb50?d=identicon&s=25 Matt G (Guest)
on 2007-04-11 15:50
(Received via mailing list)
Ok, I've made the change to the htaccess file, and that looks to have
sped things up considerably.  I'm going to let a couple of others test
it out to see if they notice an improvement as well.

Unfortunately, I don't think I have enough control over the server to
setup mongrel on Dreamhost, but if you know a way, I'd love to try it
out!

Thank you for all of your help!  I'll let you know if I'm still having
any issues.

Matt
This topic is locked and can not be replied to.