mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Cache when not found in LookupLayout
Very visible when using the pprof mutex profiler. ```bash name old time/op new time/op delta Baseline-10 58.4ms ± 1% 51.6ms ± 0% -11.56% (p=0.029 n=4+4) name old alloc/op new alloc/op delta Baseline-10 64.3MB ± 0% 64.2MB ± 0% ~ (p=0.114 n=4+4) name old allocs/op new allocs/op delta Baseline-10 649k ± 0% 649k ± 0% ~ (p=0.229 n=4+4) ```
This commit is contained in:
parent
223bf28004
commit
9c24b86e4b
1 changed files with 12 additions and 8 deletions
|
@ -153,7 +153,7 @@ func newTemplateExec(d *deps.Deps) (*templateExec, error) {
|
|||
Deps: d,
|
||||
layoutHandler: output.NewLayoutHandler(),
|
||||
layoutsFs: d.BaseFs.Layouts.Fs,
|
||||
layoutTemplateCache: make(map[layoutCacheKey]tpl.Template),
|
||||
layoutTemplateCache: make(map[layoutCacheKey]layoutCacheEntry),
|
||||
|
||||
templateUsageTracker: templateUsageTracker,
|
||||
}
|
||||
|
@ -328,7 +328,7 @@ type templateHandler struct {
|
|||
|
||||
layoutHandler *output.LayoutHandler
|
||||
|
||||
layoutTemplateCache map[layoutCacheKey]tpl.Template
|
||||
layoutTemplateCache map[layoutCacheKey]layoutCacheEntry
|
||||
layoutTemplateCacheMu sync.RWMutex
|
||||
|
||||
*deps.Deps
|
||||
|
@ -357,6 +357,12 @@ type templateHandler struct {
|
|||
templateUsageTrackerMu sync.Mutex
|
||||
}
|
||||
|
||||
type layoutCacheEntry struct {
|
||||
found bool
|
||||
templ tpl.Template
|
||||
err error
|
||||
}
|
||||
|
||||
// AddTemplate parses and adds a template to the collection.
|
||||
// Templates with name prefixed with "_text" will be handled as plain
|
||||
// text templates.
|
||||
|
@ -382,7 +388,7 @@ func (t *templateHandler) LookupLayout(d output.LayoutDescriptor, f output.Forma
|
|||
t.layoutTemplateCacheMu.RLock()
|
||||
if cacheVal, found := t.layoutTemplateCache[key]; found {
|
||||
t.layoutTemplateCacheMu.RUnlock()
|
||||
return cacheVal, true, nil
|
||||
return cacheVal.templ, cacheVal.found, cacheVal.err
|
||||
}
|
||||
t.layoutTemplateCacheMu.RUnlock()
|
||||
|
||||
|
@ -390,12 +396,10 @@ func (t *templateHandler) LookupLayout(d output.LayoutDescriptor, f output.Forma
|
|||
defer t.layoutTemplateCacheMu.Unlock()
|
||||
|
||||
templ, found, err := t.findLayout(d, f)
|
||||
if err == nil && found {
|
||||
t.layoutTemplateCache[key] = templ
|
||||
return templ, true, nil
|
||||
}
|
||||
cacheVal := layoutCacheEntry{found: found, templ: templ, err: err}
|
||||
t.layoutTemplateCache[key] = cacheVal
|
||||
return cacheVal.templ, cacheVal.found, cacheVal.err
|
||||
|
||||
return nil, false, err
|
||||
}
|
||||
|
||||
// This currently only applies to shortcodes and what we get here is the
|
||||
|
|
Loading…
Reference in a new issue