【发布时间】:2015-07-06 07:10:29
【问题描述】:
我有一个如下所示的操作:
def facebook_login
render json: {users:User.all}
end
我在 2013 年初的 MacBook Pro 上运行的本地服务器输出如下:
在 989 毫秒内完成 200 次 OK(查看次数:968.5 毫秒 | ActiveRecord:13.9 毫秒)
Heroku 为同一个 API 调用输出这个:
在 3849 毫秒内完成 200 次 OK(查看次数:3782.6 毫秒 | ActiveRecord:49.4 毫秒)
Users 表包含 3000 条记录。
这是用户表的架构:
create_table "users", force: :cascade do |t|
t.string "email"
t.string "first_name"
t.string "last_name"
t.string "gender"
t.string "birthday"
t.string "bio"
t.string "facebook_id"
t.string "avatar"
t.string "password_digest"
t.string "auth_token"
t.boolean "admin", default: false, null: false
end
我来自 rails 服务器的日志:
Started POST "/facebook_login.json" for 192.168.1.7 at 2015-07-06 03:39:07 -0400
Cannot render console from 192.168.1.7! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by HomeController#facebook_login as JSON
Parameters: {"avatar"=>"https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xpa1/v/t1.0-1/10891984_10100428479784882_2780393036688516385_n.jpg?oh=b745f67a9aa8f12eeb283962473bade0&oe=5621674B&__gda__=1444484154_c3db5d55964941a930530b70aa6ef44c", "first_name"=>"Tara", "bio"=>"", "last_name"=>"Lloyd", "birthday"=>"07/08/1985", "email"=>"tlloyd07@gmail.com", "facebook_id"=>"10100528233672292", "auth_token"=>"750435390234913", "home"=>{"avatar"=>"https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xpa1/v/t1.0-1/10891984_10100428479784882_2780393036688516385_n.jpg?oh=b745f67a9aa8f12eeb283962473bade0&oe=5621674B&__gda__=1444484154_c3db5d55964941a930530b70aa6ef44c", "first_name"=>"Tara", "bio"=>"", "last_name"=>"Lloyd", "birthday"=>"07/08/1985", "email"=>"tlloyd07@gmail.com", "facebook_id"=>"10100528233672292", "auth_token"=>"750435390234913"}}
User Load (13.6ms) SELECT "users".* FROM "users"
Completed 200 OK in 989ms (Views: 968.5ms | ActiveRecord: 13.9ms)
我正在构建一个从数据库中提取数据并返回 json 的 Rails 应用程序。没有要渲染的图像或视图。为什么 ActiveRecord 只有 14 毫秒,而“视图”几乎是 1 秒(Heroku 上是 4 秒)?这个“观点”在做什么?所有这些 API 调用都是从用户表中读取 3000 条记录,那么为什么要花这么多时间在“视图”上呢?我错过了什么吗?
我尝试在我的环境/development.rb 中执行 config.cache_classes = true 但它没有改变任何东西。
另外,我不明白为什么我在这个问题上被扣了 6 分。除了暗示 Rails 很慢,我有没有冒犯任何人?
编辑:
替换后
渲染 json:{users:User.all}
与:
渲染 json: MultiJson.dump({users:User.all})
我在 Heroku 日志中看到了这一点:
Completed 200 OK in 5223ms (Views: 0.3ms | ActiveRecord: 57.6ms)
但是,0.3ms + 57.5ms 不等于 5223ms,那么其他 5 秒花费在什么上面?
【问题讨论】:
-
基于你的代码,你永远不能断言某事很慢。
-
我把问题扩展了很多,请看一下
-
版主,请重新打开问题,否则我将删除它并再次提问
-
我也很困惑为什么会被调低。对我来说似乎是一个合法的问题。
标签: ruby-on-rails ruby ruby-on-rails-3 activerecord