2014-05-16 5 views
1

나는 첫 번째 Rails App을 개발 해왔고 갑자기 느려졌다. 나는 그것이 무엇이 원인인지 확신하지 못한다. 나는 이미 이미지 관리를 위해 클립 클립을 추가하고 단지 느려지 기 시작하기 직전에 Dropbox (로컬에 반대) 스토리지를 사용하도록 전환했지만 관련없는 뷰 변경도 수행했습니다.Rails 4 렌더링보기 매우 느리다

이제 Rails와 MVC Frameworks에 대해 상대적으로 처음입니다. 그래서 무지와 경험 부족으로 잘못하고 있다고 생각합니다. 같은 무지와 경험 부족으로 문제를 진단하기가 어렵습니다.

"레일스 서버"(물론 Heroku에서의 제작 속도는 그리 빠르지는 않았지만)로 개발할 때의 출력 결과는 다음과 같습니다.

Started GET "/games/index" for 217.156.133.130 at 2014-05-16 09:31:10 -0400 
    Started GET "/games/index" for 217.156.133.130 at 2014-05-16 09:31:10 -0400 
    Processing by GamesController#index as HTML 
    Processing by GamesController#index as HTML 
     Game Load (1.3ms) SELECT "games".* FROM "games" ORDER BY name ASC 
     Game Load (1.3ms) SELECT "games".* FROM "games" ORDER BY name ASC 
    (0.8ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 9]] 
    (0.8ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 9]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 9]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 9]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 5]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 5]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 5]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 5]] 
    (1.0ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 7]] 
    (1.0ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 7]] 
    User Load (0.6ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 7]] 
    User Load (0.6ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 7]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 12]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 12]] 
    User Load (0.5ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 12]] 
    User Load (0.5ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 12]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 2]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 2]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 2]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 2]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 10]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 10]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 10]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 10]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 23]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 23]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 23]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 23]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 18]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 18]] 
    User Load (0.5ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 18]] 
    User Load (0.5ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 18]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 3]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 3]] 
    User Load (0.7ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 3]] 
    User Load (0.7ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 3]] 
    (0.8ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 13]] 
    (0.8ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 13]] 
    User Load (0.5ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 13]] 
    User Load (0.5ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 13]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 24]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 24]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 24]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 24]] 
    (1.2ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 17]] 
    (1.2ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 17]] 
    User Load (0.8ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 17]] 
    User Load (0.8ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 17]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 4]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 4]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 4]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 4]] 
    (1.0ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 8]] 
    (1.0ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 8]] 
    User Load (0.6ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 8]] 
    User Load (0.6ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 8]] 
    (0.8ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 19]] 
    (0.8ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 19]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 19]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 19]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 15]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 15]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 15]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 15]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 16]] 
    (0.6ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 16]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 16]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 16]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 20]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 20]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 20]] 
    User Load (0.4ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 20]] 
    (1.0ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 21]] 
    (1.0ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 21]] 
    User Load (0.7ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 21]] 
    User Load (0.7ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 21]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 22]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 22]] 
    User Load (0.6ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 22]] 
    User Load (0.6ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 22]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 1]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 1]] 
    User Load (0.5ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 1]] 
    User Load (0.5ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 1]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 6]] 
    (0.9ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 6]] 
    User Load (0.7ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 6]] 
    User Load (0.7ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 6]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 11]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 11]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 11]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 11]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 14]] 
    (0.7ms) SELECT COUNT(*) FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 14]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 14]] 
    User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "user_games" ON "users"."id" = "user_games"."user_id" WHERE "user_games"."game_id" = $1 [["game_id", 14]] 
    Rendered games/index.html.erb within layouts/application (77221.9ms) 
    Rendered games/index.html.erb within layouts/application (77221.9ms) 
Completed 200 OK in 77227ms (Views: 77194.1ms | ActiveRecord: 31.4ms) 
Completed 200 OK in 77227ms (Views: 77194.1ms | ActiveRecord: 31.4ms) 

보기에서 볼 수 있듯이 렌더링에는 거의 1 분 20 초가 소요되며 데이터베이스 액세스는 실제로 문제가되지 않습니다. 이것이 렌더링되는 모습입니다.

<h1>All Games</h1> 

<%= link_to "Add new", games_new_path %> 

<% @games.each do |game| %> 
    <div class="game"> 
    <div class="game_image"> 
     <% if game.image.exists? %> 
     <%= image_tag game.image.url(:thumb) %> 
     <% end %> 
    </div> 
    <div class="game_info"> 
     <h2><%= link_to game.name, game %></h2><%= link_to "Edit", edit_game_path(game) %><br /> 
     <% if game.free %> 
     This game is free.<br /> 
     <% if game.notes != "" %> 
      N.B. <%= game.notes %> 
     <% end %> 
     <% end %> 
     <%= game.users.size %> Players<br /> 
     <div class="user_list"> 
     <% game.users.each do |user| %> 
     <div class="user_thumb"> 
      <% if user.avatar.exists? %> 
      <%= link_to image_tag(user.avatar.url(:pinky)), user %> 
      <% else %> 
      <div class="alt_link"> 
       <%= link_to user.name, user %> 
      </div> 
      <% end %> 
     </div> 
     <% end %> 
    </div> 
    <div class="clear_div"></div> 
    </div> 
    </div> 
<% end %> 
단지 일반 프로그램에서 내 지식이 가장 비용이 많이 드는 부분은 각 게임에 대해 나는 그것의 모든 사용자 통해 반복하고 있다는 사실이 될 것을 나에게 제안

(사용자와 게임이 대다 관계). 그러나 데이터베이스의 각 테이블에는 수십 개의 레코드 만 있습니다 ... 처리 할 데이터가 거의 없기 때문에 실제로는 매우 희박합니다. 이 느립니다.

레일 초보자로서, 누구든지 이걸 일으키는 것을 시도하고 볼 수있는 몇 가지 단계를 권할 수 있습니까? 나는 주변에 봤 거든 많은 사람들 이이 문제가 있지만 분명히 거기에 내가 찾을 수있는 아무것도 내 특별한 문제를 해결하기 때문에 일어날 수있는 많은 이유가 있다는 것을 알게되었습니다.

편집 : Eager Loading을 추가하면 Active Record가 훨씬 빠르지 만 View 렌더링은 여전히 ​​매우 느립니다. 종이 클립에서 exists?를 호출

Started GET "/games/index" for 217.156.133.130 at 2014-05-16 10:07:07 -0400 
Started GET "/games/index" for 217.156.133.130 at 2014-05-16 10:07:07 -0400 
Processing by GamesController#index as HTML 
Processing by GamesController#index as HTML 
    Game Load (1.1ms) SELECT "games".* FROM "games" ORDER BY name ASC 
    Game Load (1.1ms) SELECT "games".* FROM "games" ORDER BY name ASC 
    UserGame Load (0.8ms) SELECT "user_games".* FROM "user_games" WHERE "user_games"."game_id" IN (9, 5, 7, 12, 2, 10, 23, 18, 3, 13, 24, 17, 4, 8, 19, 15, 16, 20, 21, 22, 1, 6, 11, 14) 
    UserGame Load (0.8ms) SELECT "user_games".* FROM "user_games" WHERE "user_games"."game_id" IN (9, 5, 7, 12, 2, 10, 23, 18, 3, 13, 24, 17, 4, 8, 19, 15, 16, 20, 21, 22, 1, 6, 11, 14) 
    User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (5, 6, 4, 1, 9, 8, 11) 
    User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (5, 6, 4, 1, 9, 8, 11) 
    Rendered games/index.html.erb within layouts/application (79191.5ms) 
    Rendered games/index.html.erb within layouts/application (79191.5ms) 
Completed 200 OK in 79196ms (Views: 79191.6ms | ActiveRecord: 2.5ms) 
Completed 200 OK in 79196ms (Views: 79191.6ms | ActiveRecord: 2.5ms) 
+4

컨트롤러에 무엇이 있습니까? N + 1 검색어 문제 인 것 같습니다. '@games = Game.includes (: users)'를 아직로드하지 않았다면 열심히로드해야합니다. –

+0

Ahh. 이것은 나에게 새로운 것이다. 현재 나는'@games = Game.all.order ("name ASC")' – Luke

+0

을 가지고 있습니다. 현재 약 20-25 개의 게임과 15-20 명의 사용자가 있다고 생각합니다. – Luke

답변

4

는 두 파일 시스템을 점검 할 것이다, 또는 당신이 HTTP 요청, 호출 할 때마다 그 만들 것 아마존 S3를 사용하는 경우 때문에 매우 느립니다. exists?을 사용하는 대신 game.image?user.avatar?을 사용할 수 있습니다. 이 경우 파일이 실제로 존재하는지 확인하는 대신 파일 이름이 데이터베이스에 저장되어 있는지 확인합니다. 이러한 이미지가 Rails 애플리케이션의 컨텍스트 외부에서 삭제되는 것에 대해 걱정하지 않는다면 훨씬 빨라질 것입니다.

+0

나는 이것이 문제라고 생각한다. 어떤 이유로 든 Heroku 서버에서 일부 이미지에 액세스 할 수 없기 때문에 원래 추가했습니다. 이것은 또한 내가 Dropbox로 이사 한 이유입니다. 존재하지 않고 달리기? 속도가 빨라지지만 (1 초 정도까지), 페이지에 액세스 할 수 없어 이미지가 충돌합니다. 나는이 문제를 극복하기 위해 기본 이미지를 사용하기 위해 이미지가 존재하지 않는 기존의 객체를 수정하겠다. 도와 주셔서 대단히 감사합니다! – Luke

+0

도움을 주셔서 감사합니다.) –

1

ERB 파일에서 루비 코드를 주석 처리하고 렌더링이 느려지는 줄을 정확하게 찾아내는 것으로 시작합니다. 필자는 Paperclip을 사용한 적이 없지만 @ abstractcoder의 응답이 확실히 원인 일 수 있습니다.

또 다른 옵션은 here과 같이 조각 캐싱을 사용하는 것입니다. 뷰의 일부분을 캐시하여 모든 요청시 처리되는 대신 디스크에서 렌더링되도록 할 수 있습니다. 코드의 특정 부분을 캐시 할 수 있다는 점에서 꽤 매끄럽지 만, 모델이 업데이트되면 캐시를 파기에 충분할만큼 똑똑합니다.

하지만 조기 최적화를 수행하기 전에 먼저 근본 원인을 먼저 찾으십시오.

+0

답장을 보내 주셔서 감사합니다, 삼일! 추상화 기의 진단은 정확 해 보이지만 일단 앱이 커지면 단편 캐싱에 대한 여러분의 제안은 확실히 유용 할 것입니다. :) – Luke

관련 문제