To do #1284
Improvment proposal to optimise rendering of the sprint board
Status:
New
Priority:
Low
Assignee:
-
Estimated time:
Blocked:
No
Milestones:
Sprint:
Description
The sprint board can be very slow on rendering here's a naive and easy proposal based on this article https://signalvnoise.com/posts/3113-how-key-based-cache-expiration-works#comments
Update the view app/views/sprints/show.html.erb by adding a 'cache' markup
<%= render :partial => 'post_its/sprint_board/head',
:locals => {:project => @project, :sprint => @sprint, :path => method(:sprint_path)} %>
<%- sprint_board_id = 'sprint_board' -%>
<% cache [ "v4", @sprint ] do %>
<table class="sprint-board">
<thead class="sprint-board">
<tr class="sprint-board">
and
:method => 'GET', :class => 'icon icon-add' %>
</span>
<%- end -%>
</div>
<%- end -%>
<%= render :partial => 'sprints/show', :formats => [:js],
:locals => {:sprint => @sprint,
:sprint_board_id => sprint_board_id} %>
then update the IssuePatch model by adding
- :touch => true
- before_save :touch_sprint
module Scrum
module IssuePatch
def self.included(base)
base.class_eval do
belongs_to :sprint, :touch => true
has_many :pending_efforts, -> { order('date ASC') }
acts_as_list :scope => :sprint
safe_attributes :sprint_id, :if => lambda { |issue, user|
user.allowed_to?(:edit_issues, issue.project)
}
before_save :update_position, :if => lambda { |issue|
issue.project.scrum? and issue.sprint_id_changed? and issue.is_pbi?
}
before_save :update_pending_effort, :if => lambda { |issue|
issue.project.scrum? and issue.status_id_changed? and issue.is_task?
}
before_save :update_assigned_to, :if => lambda { |issue|
issue.project.scrum? and issue.status_id_changed? and issue.is_task?
}
before_save :update_parent_pbi, :if => lambda { |issue|
issue.project.scrum? and Scrum::Setting.auto_update_pbi_status and
(issue.status_id_changed? or issue.new_record?) and
issue.is_task? and !issue.parent_id.nil?
}
before_save :touch_sprint, :if => lambda { |issue|
issue.project.scrum?
}
here's the touch_sprint implementation
def touch_sprint
if sprint
sprint.touch
sprint.save!
end
if (old_sprint = Sprint.find_by_id(sprint_id_was))
old_sprint.touch
old_sprint.save!
end
end
create a new lib/scrum/time_entry_patch.rb file
require_dependency 'time_entry'
module Scrum
module TimeEntryPatch
def self.included(base)
base.class_eval do
before_save :touch_issue, :if => lambda { |issue|
issue.project.scrum?
}
private
def touch_issue
if issue
issue.touch
issue.save!
end
end
end
end
end
end
and update the init.rb file by adding the new patch
Query.send(:include, Scrum::QueryPatch) Tracker.send(:include, Scrum::TrackerPatch) User.send(:include, Scrum::UserPatch) TimeEntry.send(:include, Scrum::TimeEntryPatch)
Files