質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

Q&A

解決済

1回答

1486閲覧

アクティブレコードを使ったときに発生するテンプレート内部でのクエリはどうしていますか?

kodai

総合スコア759

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

0グッド

1クリップ

投稿2015/07/06 09:24

アクティブレコードパターンで実装されたORM(Railsに限らない)にはだいたい遅延ローディングとリフレクションを使ったダイナミッククエリ機能があると思います。
機能自体にはなんの不満もないのですが、ビューにモデルを渡すとどうしてもレンダリング中にクエリが発生しますよね。(DBのビューではなくHTMLを生成するテンプレート・ビューのことです)
関連レコードを取得するときや、子データの件数を表示するときに count() を使ったり。

DB接続できないなど例外的なケースを除いて、エラー処理がなければビュー内で使用することはあまり気にしていませんでした。
ただ、デバッグが面倒であったり、ビュー内でボトルネックができるなど弊害もまれにあります。

事前にデータをフェッチしておけば解決できることではありますが
そのために一時変数が増えたり、状態によっては画面に表示されないデータまで取得しておく必要があったりもするのでこちらもあまり気持ちの良いものではありません。

どちらもそれほど大きな問題になるようなことではありませんが、何か指針を決めて実装している方がいれば教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

原則、ビュー内でDBへのIOが頻発してしまうことがもっともボトルネックになりやすいので、
それに対する対応として、プリローディングを利用すること以外は、
特に意識して実装しませんね。

余計なデータまでロードしてしまうことに関しても、特にサーバー負荷が極端にならない限り、
対処はしてません。

そのあたりの問題は、負荷テストを行えるのであればその上で、
負荷テストを行わないのであれば、実利用上で問題が起きてから(起きる気配を察したら)
最適化してゆく感じです。

先回りして複雑なことをやっても、実際にはあまり効果がない場合があったり、
コードの可読性が著しく落ちたりするので、
そのあたり、最適化は必要になってから、まとめて行うようにしています。

投稿2015/07/06 10:40

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問