2014-05-16 140 views
1

我一直在开发我的第一个Rails应用程序,它突然变得非常缓慢。我不确定是什么导致了它。我已经添加了用于管理图像的回形针,并在开始变慢之前切换到使用Dropbox(而不是本地)存储,但我也做了一些无关的视图更改。导轨4视图渲染非常慢

现在,我对Rails和MVC Frameworks相对较新。所以我怀疑这是由于无知和缺乏经验而造成的错误。只是相同的无知和缺乏经验使诊断问题变得困难。

所以,这里是在使用“rails server”开发运行时的输出(尽管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) 

正如你所看到的视图正在将近一分钟,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 %> 

我从只是一般的编程知识建议,我认为这是最昂贵的部分应该是每场比赛,我通过其所有用户的循环的事实(用户和游戏有不少一对多关系)。但是,数据库中的每张表格只有几十条记录...几乎没有任何数据需要处理,所以我不相信它应该真的很慢,这个很慢。

作为一个Rails新手,任何人都可以向我推荐一些步骤,我可以试着看看是什么导致了这个?我搜索了一下,我发现很多人都有这个问题,但显然有很多原因可以发生,因为我找到的东西已经解决了我的特殊问题。

编辑:添加Eager加载后,活动记录更快,但视图渲染仍然非常缓慢。

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

啊。这对我来说是新的。目前我有'@games = Game.all.order(“名字ASC”)' – Luke

+0

我认为目前大约有20-25场比赛和15-20个用户。 – Luke

回答

4

拨打回形针exists?是很慢的,因为它要么被检查文件系统,或者如果你正在使用亚马逊S3就会使一个HTTP请求,它的每一次调用。您可以使用game.image?user.avatar?而不是使用exists?。这只会检查文件名是否存储在数据库中,而不是检查文件是否真实存在。如果您不担心这些图像在您的Rails应用程序的上下文之外被删除,则会更快。

+0

我相信这是问题所在。我最初添加它是因为某些图像在任何情况下都无法在Heroku服务器上访问。这也是我转移到Dropbox的原因。运行没有.exists?速度加快了很多(下降到大约1秒),但由于无法访问图像,页面现在崩溃。我想我会修改任何存在图像不存在的对象,以使用默认图像来解决这个问题。非常感谢您的帮助! – Luke

+0

感谢您的帮助=) –

1

我会从注释ERB文件中的任何ruby代码开始,并尝试精确定位导致渲染减慢爬行的行数。我从来没有使用Paperclip,但@ abstractcoder的回应肯定是一个原因。

另一种选择是使用片段缓存,如here所述。它将允许您缓存部分视图,以便从磁盘渲染而不是在每个请求上处理。它非常漂亮,可以缓存某些代码部分,但如果更新模型,它仍然足够聪明,可以缓存高速缓存。

但是在做任何不成熟的优化之前,一定要先找出根本原因。

+0

感谢您的回复,Threeve! abstractcoder的诊断似乎是正确的,但是一旦应用程序变得更大,您对片段缓存的建议肯定会派上用场。 :) – Luke