Deviseがユーザーをログインすると、ユーザーIDのみがセッションに格納されているようです。 これは、current_user
を呼び出すと、SQLクエリー(User.find(:id)
のようなもの)がUserオブジェクトを作成するたびに発生し、多くの場合、不必要な読み込みが行われることを意味します。
たとえば、レイアウトファイル内の右上のヘッダーにユーザーの名前を表示し、すべての応答でレンダリングされるようにすることができます。そのためには、と書くだけで、usersテーブルへのSQLクエリが行われます。Deviseをカスタマイズしてセッションにさらに情報を格納する方法は?
実際のユーザーの基本情報(名前や電子メールなど)をセッションに保存して、余分なSQLクエリを避けたいと思っています。
この問題の正しい解決方法を教えてください。
なぜ「そのSQLクエリは効果的に無料ですか」とお考えですか?私はこれが本当に避けられるべき余分な質問だと思う。ユーザーが自分の名前を更新すると、セッションを更新するだけで済みます。 – Tao
このクエリはプライマリキーを使用してレコードを検索するので、データベースはレコードを非常に高速に返します。次に、ActiveRecordはレコードオブジェクトのインスタンスを作成しますが、単一のARレコードが作成するのが非常に迅速です。ルール1:最適化前後のプロファイル。これは思慮のない時期尚早の最適化のようなものです。このユーザー検索を追加すると、ページの作成時間が大幅に変更される場合、a)アプリケーションはデータベースで何もしていないか、b)データベーステーブル/インデックスが不正になっているため、修正または再調整する必要があります。 –
大丈夫、ありがとう〜 – Tao