summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2019-05-22 15:30:10 +0100
committerSean McGivern <sean@gitlab.com>2019-05-22 16:56:12 +0100
commitf9f9147290b5bc315e595e059c851593c1fc466f (patch)
tree40ea181966c7ed2b1451bd89ab280361c79596fd
parentbc4a18ecb9e85a5ee51541ed25b2cb9c4a2768b5 (diff)
downloadgitlab-ce-62116-performance-issue-502-errors-on-rendering-of-issues-with-heavy-markdown-contents.tar.gz
This helper is used for extracting part of the issue / MR / whatever description for use in the description meta tag: 1. To do that, we look at the source of the Markdown description. 2. We then strip out all HTML tags. 3. And then take the first 30 words. Doing that can be really slow - especially as Markdown is supposed to be treated as plain text. There are many better ways to do this, but the immediate performance fix is to swap steps 2 and 3. This does mean that the description may be less than 30 words (or even empty), but it is much faster when the description is very long.
-rw-r--r--app/helpers/page_layout_helper.rb3
-rw-r--r--changelogs/unreleased/62116-performance-issue-502-errors-on-rendering-of-issues-with-heavy-markdown-contents.yml6
-rw-r--r--spec/helpers/page_layout_helper_spec.rb8
3 files changed, 16 insertions, 1 deletions
diff --git a/app/helpers/page_layout_helper.rb b/app/helpers/page_layout_helper.rb
index 5038dcf9746..ec1d8577f36 100644
--- a/app/helpers/page_layout_helper.rb
+++ b/app/helpers/page_layout_helper.rb
@@ -1,3 +1,4 @@
+# coding: utf-8
# frozen_string_literal: true
module PageLayoutHelper
@@ -36,7 +37,7 @@ module PageLayoutHelper
if description.present?
@page_description = description.squish
elsif @page_description.present?
- sanitize(@page_description, tags: []).truncate_words(30)
+ sanitize(@page_description.truncate_words(30), tags: [])
end
end
diff --git a/changelogs/unreleased/62116-performance-issue-502-errors-on-rendering-of-issues-with-heavy-markdown-contents.yml b/changelogs/unreleased/62116-performance-issue-502-errors-on-rendering-of-issues-with-heavy-markdown-contents.yml
new file mode 100644
index 00000000000..9596f487116
--- /dev/null
+++ b/changelogs/unreleased/62116-performance-issue-502-errors-on-rendering-of-issues-with-heavy-markdown-contents.yml
@@ -0,0 +1,6 @@
+---
+title: Fix performance issue with large Markdown content in issue or merge request
+ description
+merge_request: 28597
+author:
+type: performance
diff --git a/spec/helpers/page_layout_helper_spec.rb b/spec/helpers/page_layout_helper_spec.rb
index cf98eed27f1..bf50763d06f 100644
--- a/spec/helpers/page_layout_helper_spec.rb
+++ b/spec/helpers/page_layout_helper_spec.rb
@@ -38,6 +38,14 @@ describe PageLayoutHelper do
expect(helper.page_description).to eq 'Bold Header'
end
+
+ it 'truncates before sanitizing' do
+ helper.page_description('<b>Bold</b> <img> <img> <img> <h1>Header</h1> ' * 10)
+
+ # 12 words because <img> was counted as a word
+ expect(helper.page_description)
+ .to eq('Bold Header Bold Header Bold Header Bold Header Bold Header Bold Header...')
+ end
end
describe 'page_image' do