Commit ab094e67 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'faster-diff-rendering' into 'master'

Faster diff rendering

1. Dont render link in separate template but use helper instead
2. Don't build new object but just reuse variables

New note for diff is rendered per each diff line. Such simple improvements gives us 20..100% better performance depends on diff size
parents bc6a17a6 2aef3b00
...@@ -42,4 +42,23 @@ module NotesHelper ...@@ -42,4 +42,23 @@ module NotesHelper
project_id: noteable.project.id, project_id: noteable.project.id,
}.to_json }.to_json
end end
def link_to_new_diff_note(line_code)
discussion_id = Note.build_discussion_id(
@comments_target[:noteable_type],
@comments_target[:noteable_id] || @comments_target[:commit_id],
line_code
)
data = {
noteable_type: @comments_target[:noteable_type],
noteable_id: @comments_target[:noteable_id],
commit_id: @comments_target[:commit_id],
line_code: line_code,
discussion_id: discussion_id
}
link_to "", "javascript:;", class: "add-diff-note js-add-diff-note-button",
data: data, title: "Add a comment to this line"
end
end end
...@@ -122,12 +122,16 @@ class Note < ActiveRecord::Base ...@@ -122,12 +122,16 @@ class Note < ActiveRecord::Base
discussions discussions
end end
def build_discussion_id(type, id, line_code)
[:discussion, type.try(:underscore), id, line_code].join("-").to_sym
end end
# Determine whether or not a cross-reference note already exists. # Determine whether or not a cross-reference note already exists.
def self.cross_reference_exists?(noteable, mentioner) def cross_reference_exists?(noteable, mentioner)
where(noteable_id: noteable.id, system: true, note: "_mentioned in #{mentioner.gfm_reference}_").any? where(noteable_id: noteable.id, system: true, note: "_mentioned in #{mentioner.gfm_reference}_").any?
end end
end
def commit_author def commit_author
@commit_author ||= @commit_author ||=
...@@ -194,7 +198,7 @@ class Note < ActiveRecord::Base ...@@ -194,7 +198,7 @@ class Note < ActiveRecord::Base
end end
def discussion_id def discussion_id
@discussion_id ||= [:discussion, noteable_type.try(:underscore), noteable_id || commit_id, line_code].join("-").to_sym @discussion_id ||= Note.build_discussion_id(noteable_type, noteable_id || commit_id, line_code)
end end
# Returns true if this is a downvote note, # Returns true if this is a downvote note,
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
%td.old_line %td.old_line
= link_to raw(type == "new" ? "&nbsp;" : line_old), "##{line_code}", id: line_code = link_to raw(type == "new" ? "&nbsp;" : line_old), "##{line_code}", id: line_code
- if @comments_allowed - if @comments_allowed
= render "projects/notes/diff_note_link", line_code: line_code = link_to_new_diff_note(line_code)
%td.new_line= link_to raw(type == "old" ? "&nbsp;" : line_new) , "##{line_code}", id: line_code %td.new_line= link_to raw(type == "old" ? "&nbsp;" : line_new) , "##{line_code}", id: line_code
%td.line_content{class: "noteable_line #{type} #{line_code}", "line_code" => line_code}= raw diff_line_content(line) %td.line_content{class: "noteable_line #{type} #{line_code}", "line_code" => line_code}= raw diff_line_content(line)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment