Railsの高速化

1pt

Railsで動いているサービスが遅い。

そもそもRailsのことを根本的に理解していなかったので、とりあえずlogみて、おどろいた。

  • ・・・なんじゃ、このクエリーの数は!?


ログをみながらごにょごにょしながらわかったことは、このフレームワークは開発が楽になるように作られていることで、大量のデータを扱うときは書き方に気をつけないといけないということ。

例えばController側で

@user = User.find(:all)


としてあったとしても、ビュー側で

<% @user.each dp |user| %>
  <%= user.name %>
  <%= user.area.name %>
<% end %>


としたばあい、@userの長さ分だけAreaを見に行く。
@userが長ければ長いほど大変なことに。

見つけた文献ではこれは「N+1 クエリー問題」というらしい。

たしかに@user.area.nameでAreaを呼び出せるのはらくだが、そんな現実を知ると不用意に扱えなくなる。

ってことで、解決方法としては、「Eager Loading」というのがあり、簡単にいうと最初に全部呼び出しとけってことだそうだ。

@user = User.find(:all :include => {:area})


ってやっておくと、最初のクエリであらかじめAreaを呼び出してくれるので、その後に@user.areaをしてもいちいちクエリをださない。

光が射したぜ・・・、なんとかなりそうだ。

「Railsの高速化」について友人に書いてもらう。

あなたにとって「Railsの高速化」とは?

ログインするとワンクリックでキーワードを投稿できます

ログインする 新規登録する

関連したキーワードを持つお気に入り

他の人の「Railsの高速化」を見る