【发布时间】:2012-04-03 14:16:43
【问题描述】:
我有一些 Rails 控制器操作以这种方式响应 AJAX 请求:
books = Book.all
render :json => { :books => books }
这应该相对较快,但需要 5 秒以上,这对于网络上的任何请求来说都太长了。日志如下所示:
Completed 200 OK in 5212ms (Views: 2679.7ms | ActiveRecord: 147.7ms)
我不明白当我不渲染到视图文件时如何在“视图”中花费 2.6 秒,或者总共如何花费 5212 毫秒。什么需要这么多时间,如何加快速度?
编辑:在这个特定请求中返回了大约 1000 本书,我猜每本书大约有 1kb 的数据。编辑 2:查看控制台中的响应,响应的大小为 973kb。
【问题讨论】:
-
一共有多少本书?反响有多大?
-
你试过
respond_with(Book.all)吗? -
不,我没试过。由于某种原因它更快吗?我现在就去读。
-
除了 rails 的内部构建器之外,您还可以尝试其他一些 json 构建器。他们可能会更快。可能是 Rails 的内部 json 构建器在设计上很慢。
-
为什么没有人阅读原始问题?看看他的 ActiveRecord 时间(148 毫秒)与查看渲染时间(2700 毫秒。差不多 3 秒!)。这不是数据访问性能问题,而是 JSON 渲染的性能问题。
标签: ruby-on-rails ruby-on-rails-3 json performance activerecord