ref: fe9fd0acf4b0fa972d3918d1abcdfcb21de45692
parent: 7e0fa13faab4b77427b4f9ac392fda252b7b50ab
author: Bjørn Erik Pedersen <[email protected]>
date: Mon Feb 20 03:51:18 EST 2017
hugolib: Cache the value of Page's RelPermalink
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -189,7 +189,8 @@
RSSLink template.HTML
URLPath
- permalink *url.URL
+ permalink *url.URL
+ relPermalink string
paginator *Pager
@@ -213,6 +214,7 @@
plainWordsInit sync.Once
renderingConfigInit sync.Once
pageURLInit sync.Once
+ relPermalinkInit sync.Once
}
// IsNode returns whether this is an item of one of the list types in Hugo,
@@ -927,34 +929,39 @@
}
func (p *Page) RelPermalink() string {
- link := p.getPermalink()
+ p.relPermalinkInit.Do(func() {
+ link := p.getPermalink()
- if p.s.Info.canonifyURLs {
- // replacements for relpermalink with baseURL on the form http://myhost.com/sub/ will fail later on
- // have to return the URL relative from baseURL
- relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
- if err != nil {
- return ""
- }
+ if p.s.Info.canonifyURLs {
+ // replacements for relpermalink with baseURL on the form http://myhost.com/sub/ will fail later on
+ // have to return the URL relative from baseURL
+ relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
+ if err != nil {
+ return
+ }
- relpath = filepath.ToSlash(relpath)
+ relpath = filepath.ToSlash(relpath)
- if relpath[0] == '.' {
- relpath = relpath[1:]
- }
+ if relpath[0] == '.' {
+ relpath = relpath[1:]
+ }
- if !strings.HasPrefix(relpath, "/") {
- relpath = "/" + relpath
+ if !strings.HasPrefix(relpath, "/") {
+ relpath = "/" + relpath
+ }
+
+ p.relPermalink = relpath
+ return
}
- return relpath
- }
+ link.Scheme = ""
+ link.Host = ""
+ link.User = nil
+ link.Opaque = ""
+ p.relPermalink = link.String()
+ })
- link.Scheme = ""
- link.Host = ""
- link.User = nil
- link.Opaque = ""
- return link.String()
+ return p.relPermalink
}
var ErrHasDraftAndPublished = errors.New("both draft and published parameters were found in page's frontmatter")