Commit da9746e5 authored by Douwe Maan's avatar Douwe Maan

Enable caching of Gitlab::Markdown rendered result

parent ed41333a
...@@ -20,14 +20,16 @@ module Gitlab ...@@ -20,14 +20,16 @@ module Gitlab
# #
# Returns an HTML-safe String # Returns an HTML-safe String
def self.render(text, context = {}) def self.render(text, context = {})
pipeline = context[:pipeline] || :full cache_key = context.delete(:cache_key)
html_pipeline = html_pipelines[pipeline]
transformers = get_context_transformers(pipeline)
context = transformers.reduce(context) { |context, transformer| transformer.call(context) }
html_pipeline.to_html(text, context) if cache_key
cache_key = full_cache_key(cache_key, context[:pipeline])
Rails.cache.fetch(cache_key) do
cacheless_render(text, context)
end
else
cacheless_render(text, context)
end
end end
# Provide autoload paths for filters to prevent a circular dependency error # Provide autoload paths for filters to prevent a circular dependency error
...@@ -130,9 +132,7 @@ module Gitlab ...@@ -130,9 +132,7 @@ module Gitlab
], ],
email: [ email: [
:full, :full,
{ { only_path: false }
only_path: false
}
], ],
description: [ description: [
:full, :full,
...@@ -155,6 +155,17 @@ module Gitlab ...@@ -155,6 +155,17 @@ module Gitlab
end end
end end
def self.cacheless_render(text, context = {})
pipeline = context[:pipeline] || :full
html_pipeline = html_pipelines[pipeline]
transformers = get_context_transformers(pipeline)
context = transformers.reduce(context) { |context, transformer| transformer.call(context) }
html_pipeline.to_html(text, context)
end
def self.get_filters(pipelines) def self.get_filters(pipelines)
Array.wrap(pipelines).flat_map do |pipeline| Array.wrap(pipelines).flat_map do |pipeline|
case pipeline case pipeline
...@@ -182,5 +193,9 @@ module Gitlab ...@@ -182,5 +193,9 @@ module Gitlab
end end
end.compact end.compact
end end
def self.full_cache_key(cache_key, pipeline = :full)
["markdown", *cache_key, pipeline]
end
end end
end end
...@@ -11,10 +11,10 @@ module Gitlab ...@@ -11,10 +11,10 @@ module Gitlab
@load_lazy_references = load_lazy_references @load_lazy_references = load_lazy_references
end end
def analyze(text) def analyze(text, cache_key: nil)
references.clear references.clear
@document = Gitlab::Markdown.render(text, project: project) @document = Gitlab::Markdown.render(text, project: project, cache_key: cache_key)
end end
%i(user label issue merge_request snippet commit commit_range).each do |type| %i(user label issue merge_request snippet commit commit_range).each do |type|
......
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