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
#
# Returns an HTML-safe String
def self.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) }
cache_key = context.delete(:cache_key)
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
# Provide autoload paths for filters to prevent a circular dependency error
......@@ -130,9 +132,7 @@ module Gitlab
],
email: [
:full,
{
only_path: false
}
{ only_path: false }
],
description: [
:full,
......@@ -155,6 +155,17 @@ module Gitlab
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)
Array.wrap(pipelines).flat_map do |pipeline|
case pipeline
......@@ -182,5 +193,9 @@ module Gitlab
end
end.compact
end
def self.full_cache_key(cache_key, pipeline = :full)
["markdown", *cache_key, pipeline]
end
end
end
......@@ -11,10 +11,10 @@ module Gitlab
@load_lazy_references = load_lazy_references
end
def analyze(text)
def analyze(text, cache_key: nil)
references.clear
@document = Gitlab::Markdown.render(text, project: project)
@document = Gitlab::Markdown.render(text, project: project, cache_key: cache_key)
end
%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