Rails在AJAX命令中严重延迟

时间:2011-05-07 22:23:44

标签: ruby-on-rails jquery

我有这个远程链接列表。单击一个时,会更新两个div,每个div都有自己的部分。

_printing.html.erb

<%= link_to printing.name, printing, :remote => true %>

印刷/ show.js.erb

jQuery('#render').html( "<%= escape_javascript(render "render",:printing=>@printing) %>" );
jQuery('#info').html( "<%= escape_javascript(render "info",:printing=>@printing) %>" );

单击链接时,需要一段时间才能替换div。这个例子在被替换之前需要15秒。我用手表计时了。但是日志讲述了一个不同的故事。

Rendered printings/_render.html.erb (22.7ms)
Rendered printings/_info.html.erb (39.7ms)
Rendered printings/show.js.erb (73.6ms)
Completed 200 OK in 978ms (Views: 457.7ms | ActiveRecord: 40.6ms)

所以有两次严重的延迟。第一个:为什么上述值的总和如此之大? 第二,为什么我要等15秒,但是日志告诉我它花了不到一秒钟?

2 个答案:

答案 0 :(得分:0)

所以这里有几种可能性。这可能是一个延迟问题(Firebug或Safari / Chrome检查器工具会显示这个),javascript中的一些问题正在减慢事件循环(这不太可能,但可能,你可以在JS调试器中单步执行代码),或者可能是由于Web服务器的性能。 1秒的响应时间并不快,日志视图只能告诉您部分故事。除了在请求中花费的时间(显示)之外,队列中的其他请求可能会显着延迟请求。开发模式运行单个进程服务器,因此每个请求必须排队等待服务。如果您正在运行Webrick,那么所有投注都会在性能方面下降,但通过安装mongrel或thin很容易解决。

为了更好地了解您应用的效果,请安装newrelic gem,它提供了一个非常全面的开发模式视图,用于查看您的应用花费时间的位置。

答案 1 :(得分:0)

响应时间的差异可能与浏览器解压缩gzip压缩的AJAX请求的速度有关。

考虑针对这些ajax请求测试关闭压缩。有关详细信息,请参阅http://public.ok2life.com/welcome/index/86