diff options
author | bep <bjorn.erik.pedersen@gmail.com> | 2015-01-21 17:28:05 +0300 |
---|---|---|
committer | bep <bjorn.erik.pedersen@gmail.com> | 2015-01-21 17:30:03 +0300 |
commit | c8f8f48e9600f733422180d50a97bb2deea8ba75 (patch) | |
tree | 0f931a8e807d4a207a7093f56afd92f0e86a9cc8 | |
parent | 19c52ab0b5a5a8f89d43dcc2e2a15e2f53170017 (diff) |
Cache the page's rendering context flags
This map can potentially be used many times for a given page, and altough the cost of re-creating the map should be minimal, caching it is simple -- and could save some GC and CPU cycles.
-rw-r--r-- | hugolib/page.go | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/hugolib/page.go b/hugolib/page.go index 937310467..c30728c03 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -32,6 +32,7 @@ import ( "path" "path/filepath" "strings" + "sync" "time" ) @@ -50,15 +51,17 @@ type Page struct { Tmpl tpl.Template Markup string - extension string - contentType string - renderable bool - layout string - linkTitle string - frontmatter []byte - rawContent []byte - contentShortCodes map[string]string - plain string // TODO should be []byte + extension string + contentType string + renderable bool + layout string + linkTitle string + frontmatter []byte + rawContent []byte + contentShortCodes map[string]string + plain string // TODO should be []byte + renderingConfigFlags map[string]bool + renderingConfigFlagsInit sync.Once PageMeta Source Position @@ -187,21 +190,24 @@ func (p *Page) renderContent(content []byte) []byte { } func (p *Page) getRenderingConfigFlags() map[string]bool { - flags := make(map[string]bool) - pageParam := p.GetParam("blackfriday") - siteParam := viper.GetStringMap("blackfriday") + p.renderingConfigFlagsInit.Do(func() { + p.renderingConfigFlags = make(map[string]bool) - flags = cast.ToStringMapBool(siteParam) + pageParam := p.GetParam("blackfriday") + siteParam := viper.GetStringMap("blackfriday") - if pageParam != nil { - pageFlags := cast.ToStringMapBool(pageParam) - for key, value := range pageFlags { - flags[key] = value + p.renderingConfigFlags = cast.ToStringMapBool(siteParam) + + if pageParam != nil { + pageFlags := cast.ToStringMapBool(pageParam) + for key, value := range pageFlags { + p.renderingConfigFlags[key] = value + } } - } + }) - return flags + return p.renderingConfigFlags } func (p *Page) isRenderingFlagEnabled(flag string) bool { |