Ruby on rails Rails花费了大量的时间来呈现页面
这更像是一个“我从哪里开始”的问题。这些视图似乎占用了最多的时间。我使用slim和coffeescript,但令人困惑的是,为什么对于异步json请求,视图呈现仍然需要很长时间 响应html(2205ms): 响应异步json请求(350ms) 控制器代码(非常简单):Ruby on rails Rails花费了大量的时间来呈现页面,ruby-on-rails,performance,Ruby On Rails,Performance,这更像是一个“我从哪里开始”的问题。这些视图似乎占用了最多的时间。我使用slim和coffeescript,但令人困惑的是,为什么对于异步json请求,视图呈现仍然需要很长时间 响应html(2205ms): 响应异步json请求(350ms) 控制器代码(非常简单): 这里有一个指向my-yes资产的链接。debug设置为false显示您的视图,日志显示大部分时间都花在那里,这将解释HTML和JSON@Leito-更新。角度控制器只是设置重复的事件。但正如我所说,即使在JSON请求中,视图呈现
这里有一个指向my-yes
资产的链接。debug
设置为false显示您的视图,日志显示大部分时间都花在那里,这将解释HTML和JSON@Leito-更新。角度控制器只是设置重复的事件。但正如我所说,即使在JSON请求中,视图呈现也要花费很长时间。可能是因为您正在将所有事件转储到gon.events
,它可能就是这个大小,您如何将@events序列化为JSON?total\u count
是您自己的方法吗?首先,只是一个建议,不要按created\u在
订购,而是使用id
。其次,我看到您使用的是AngularJS,我怀疑慢度问题可能就在这方面。看起来我做了一些事情,修复了大部分json响应时间(不确定是什么)。但是我实现了反馈记录id排序,并将gon.events
移动到format.html
块中。似乎gon
可能是一个瓶颈。我正在使用kaminari进行分页(总计数)。响应时间降至在47毫秒内完成200 OK(视图:35.5毫秒|活动记录:2.9毫秒)
。。。仍然看起来有点迟钝(对于json响应)。显示您的视图,日志显示大部分时间都花在那里,这将解释HTML和json之间的区别JSON@Leito-更新。角度控制器只是设置重复的事件。但正如我所说,即使在JSON请求中,视图呈现也要花费很长时间。可能是因为您正在将所有事件转储到gon.events
,它可能就是这个大小,您如何将@events序列化为JSON?total\u count
是您自己的方法吗?首先,只是一个建议,不要按created\u在
订购,而是使用id
。其次,我看到您使用的是AngularJS,我怀疑慢度问题可能就在这方面。看起来我做了一些事情,修复了大部分json响应时间(不确定是什么)。但是我实现了反馈记录id排序,并将gon.events
移动到format.html
块中。似乎gon
可能是一个瓶颈。我正在使用kaminari进行分页(总计数)。响应时间降至在47毫秒内完成200 OK(视图:35.5毫秒|活动记录:2.9毫秒)
。。。仍然看起来有点迟钝(对于json响应)。
Started GET "/message_boards?pp=full-backtrace" for 10.0.2.2 at 2016-06-14 19:56:24 +0000
Processing by MessageBoardsController#index as HTML
Parameters: {"pp"=>"full-backtrace"}
User Load (2.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 5 ORDER BY `users`.`id` ASC LIMIT 1
Role Load (4.0ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`id` = 5 LIMIT 1
MessageBoard::Message Load (2.3ms) SELECT `message_board_messages`.* FROM `message_board_messages` ORDER BY `message_board_messages`.`created_at` DESC LIMIT 20 OFFSET 0
(3.6ms) SELECT COUNT(*) FROM `message_board_messages`
Rendered message_boards/index.html.slim within layouts/application (0.9ms)
Exchange Load (3.4ms) SELECT `exchanges`.* FROM `exchanges` ORDER BY `exchanges`.`id` ASC LIMIT 1
CACHE (0.3ms) SELECT `exchanges`.* FROM `exchanges` ORDER BY `exchanges`.`id` ASC LIMIT 1
Rendered layouts/_menu.html.slim (322.1ms)
Completed 200 OK in 2205ms (Views: 2026.9ms | ActiveRecord: 16.2ms)
Started GET "/message_boards.json?page=2" for 10.0.2.2 at 2016-06-14 19:56:58 +0000
Processing by MessageBoardsController#index as JSON
Parameters: {"page"=>"2"}
User Load (4.8ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 5 ORDER BY `users`.`id` ASC LIMIT 1
Role Load (2.7ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`id` = 5 LIMIT 1
MessageBoard::Message Load (3.1ms) SELECT `message_board_messages`.* FROM `message_board_messages` ORDER BY `message_board_messages`.`created_at` DESC LIMIT 20 OFFSET 20
(2.9ms) SELECT COUNT(*) FROM `message_board_messages`
Completed 200 OK in 358ms (Views: 140.5ms | ActiveRecord: 13.5ms)
class MessageBoardsController < ApplicationController
def index
authorize!(:follow, :message_board)
@events = MessageBoard::Message.order(created_at: :desc).page(params[:page]).per(20)
gon.events = @events.as_json
gon.total_items = @events.total_count
respond_to do |format|
format.html
format.json { render json: {events: @events, total_items: @events.total_count} }
end
end
end
div ng-controller='MessageBoardController' ng-init='init()'
.row
.search-message-board
h3.small-16.columns.medium-6.columns.left Showing {{ filteredEvents.length }} of {{ totalItems }} Results
div.small-16.medium-6.columns.right
form.search-form
input.radius.search-text maxlength="120" type="text" ng-model='search' placeholder='Search'
span.searchclear.fi-x-circle ng-click="search = ''"
#messages
.message-panel.radius ng-repeat='event in filteredEvents = (events | filter: search)'
p
strong ID:
| {{ event.id }}
p
strong Event:
| {{ event.title }}
p
strong Message:
| {{ event.body }}
p
strong Timestamp:
| {{ event.created_at }}
pagination page="currentPage" total-items="totalItems" items-per-page="itemsPerPage"