2011-07-29 56 views
1

看來,當Devise登錄用戶時,只有用戶標識存儲在會話中。 這意味着只要調用current_user就會導致SQL查詢(類似於User.find(:id))來創建User對象,這在很多情況下是不必要的負載。
例如,我們可能希望在右上角的標題中顯示用戶名,該標題位於佈局文件中,並在每個響應中呈現。爲此,我們可能只寫current_user.name,這會導致對用戶表的SQL查詢。如何自定義設計以在會話中存儲更多信息?

我真的想在會話中存儲當前用戶的一些基本信息(例如姓名和電子郵件地址),以避免額外的SQL查詢。

這個問題的正確解決方案是什麼?

回答

2

已經忘記它了。該SQL查詢實際上是免費的。如果你真的從User.find(id)看到性能問題,那麼你的應用程序/數據庫/服務器完全擰緊。

此外,通過在會話中存儲更多數據,可以顯示不再顯示當前數據的可能性。你是否允許用戶編輯他們的信息 - 如果是的話,當他們編輯他們的名字時會發生什麼?這是沒有真正的回報的麻煩。

+0

你爲什麼說「那SQL查詢是有效的免費的」?我認爲這確實是一個應該避免的額外查詢。並且當用戶更新他的名字時,我們只需要更新會話。 – Tao

+0

該查詢使用主鍵查找記錄,因此數據庫將以極快的速度返回該記錄。接下來,ActiveRecord將實例化記錄對象,但單個AR記錄再次構建起來非常快。規則#1:優化前後的配置文件。這對我來說聽起來像是不經意的過早優化。如果添加此用戶檢索會導致頁面構建時間發生重大變化,則a)您的應用程序對數據庫沒有做其他任何操作,或者b)您的數據庫表/索引已搞亂並需要修復或重新調整。 –

+0

好吧,謝謝〜 – Tao

相關問題