Commit ab094e67eed54f5c29a33d2114cc91908e543972

Authored by Dmitriy Zaporozhets
2 parents bc6a17a6 2aef3b00

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
app/helpers/notes_helper.rb
... ... @@ -42,4 +42,23 @@ module NotesHelper
42 42 project_id: noteable.project.id,
43 43 }.to_json
44 44 end
  45 +
  46 + def link_to_new_diff_note(line_code)
  47 + discussion_id = Note.build_discussion_id(
  48 + @comments_target[:noteable_type],
  49 + @comments_target[:noteable_id] || @comments_target[:commit_id],
  50 + line_code
  51 + )
  52 +
  53 + data = {
  54 + noteable_type: @comments_target[:noteable_type],
  55 + noteable_id: @comments_target[:noteable_id],
  56 + commit_id: @comments_target[:commit_id],
  57 + line_code: line_code,
  58 + discussion_id: discussion_id
  59 + }
  60 +
  61 + link_to "", "javascript:;", class: "add-diff-note js-add-diff-note-button",
  62 + data: data, title: "Add a comment to this line"
  63 + end
45 64 end
... ...
app/models/note.rb
... ... @@ -122,11 +122,15 @@ class Note < ActiveRecord::Base
122 122  
123 123 discussions
124 124 end
125   - end
126 125  
127   - # Determine whether or not a cross-reference note already exists.
128   - def self.cross_reference_exists?(noteable, mentioner)
129   - where(noteable_id: noteable.id, system: true, note: "_mentioned in #{mentioner.gfm_reference}_").any?
  126 + def build_discussion_id(type, id, line_code)
  127 + [:discussion, type.try(:underscore), id, line_code].join("-").to_sym
  128 + end
  129 +
  130 + # Determine whether or not a cross-reference note already exists.
  131 + def cross_reference_exists?(noteable, mentioner)
  132 + where(noteable_id: noteable.id, system: true, note: "_mentioned in #{mentioner.gfm_reference}_").any?
  133 + end
130 134 end
131 135  
132 136 def commit_author
... ... @@ -194,7 +198,7 @@ class Note < ActiveRecord::Base
194 198 end
195 199  
196 200 def discussion_id
197   - @discussion_id ||= [:discussion, noteable_type.try(:underscore), noteable_id || commit_id, line_code].join("-").to_sym
  201 + @discussion_id ||= Note.build_discussion_id(noteable_type, noteable_id || commit_id, line_code)
198 202 end
199 203  
200 204 # Returns true if this is a downvote note,
... ...
app/views/projects/commits/_text_file.html.haml
... ... @@ -13,7 +13,7 @@
13 13 %td.old_line
14 14 = link_to raw(type == "new" ? " " : line_old), "##{line_code}", id: line_code
15 15 - if @comments_allowed
16   - = render "projects/notes/diff_note_link", line_code: line_code
  16 + = link_to_new_diff_note(line_code)
17 17 %td.new_line= link_to raw(type == "old" ? " " : line_new) , "##{line_code}", id: line_code
18 18 %td.line_content{class: "noteable_line #{type} #{line_code}", "line_code" => line_code}= raw diff_line_content(line)
19 19  
... ...