From c8f8f48e9600f733422180d50a97bb2deea8ba75 Mon Sep 17 00:00:00 2001 From: bep Date: Wed, 21 Jan 2015 15:28:05 +0100 Subject: [PATCH] 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. --- hugolib/page.go | 44 +++++++++++++++++++++++++------------------- 1 file 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 {