mirror of
				https://github.com/gohugoio/hugo.git
				synced 2024-05-11 05:54:58 +00:00 
			
		
		
		
	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.
This commit is contained in:
		@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user