2015-07-06 25 views
-2

我有一個看起來像這樣的動作:什麼是「意見」參照:完成200 OK在989ms(瀏覽次數:968.5ms | ActiveRecord的:13.9ms)

def facebook_login  
    render json: {users:User.all} 
    end 

我的本地服務器上運行一個MacBook Pro的2013年年初輸出這樣的:

完成200 OK在989ms(瀏覽次數:968.5ms | ActiveRecord的:13.9ms)

Heroku的輸出本作同樣的API調用:

在3849ms完成200 OK(查看:3782.6ms | ActiveRecord:49.4ms)

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"=>"[email protected]", "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"=>"[email protected]", "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) 

我建立一個Rails應用程序從數據庫中提取數據,並返回一個JSON。沒有圖像或視圖要呈現。爲什麼「視圖」在Heroku上快一秒鐘(4秒),而ActiveRecord只有14ms?這是什麼「觀點」在做什麼?所有這些API調用都是從用戶表中讀回3000條記錄,那麼爲什麼這麼多時間花在「視圖」上呢?我錯過了什麼嗎?

我試過在我的environments/development.rb中做config.cache_classes = true,但它沒有改變任何東西。

另外,我不明白爲什麼我給了這個問題六分。我有沒有冒犯任何人,但暗示Rails速度緩慢?

編輯:{用戶::User.all}

與:

渲染JSON:

替換

渲染JSON後MultiJson.dump ({users:User.all})

我看到這個Heroku的日誌:

Completed 200 OK in 5223ms (Views: 0.3ms | ActiveRecord: 57.6ms) 

然而,0.3ms的+ 57.5ms不等於5223ms,所以那些是什麼其他5秒花在?

+1

基於_your_代碼,你永遠不能斷言那東西很慢。 –

+0

我把這個問題擴展了很多,請看看 – etayluz

+0

版主,請重新打開這個問題,否則我會刪除它並再次提問 – etayluz

回答

0

經過大量的工作和調查,我已經瞭解到,在Rails中渲染json總是比在數據庫中做得慢得多。因此,解決的辦法是繞過的ActiveRecord和寫入直接SQL查詢的Postgres:

res = [] 
res << ActiveRecord::Base.connection.execute("select listings from listings;") 
res << ActiveRecord::Base.connection.execute("select users from users;") 
render json: MultiJson.dump(res) 

在此之後我看到在性能和速度提高了10倍:

Started GET "/listings.json?data=(%0A%20%20%20%20settings,%0A%20%20%20%20listings,%0A%20%20%20%20users%0A)" for 192.168.1.7 at 2015-07-07 00:27:33 -0400 
Processing by HomeController#listings as JSON 
    Parameters: {"data"=>"(\n settings,\n listings,\n users\n)", "home"=>{}} 
    (24.4ms) select listings from listings; 
    (9.3ms) select users from users; 
Completed 200 OK in 200ms (Views: 0.1ms | ActiveRecord: 33.7ms) 
相關問題