Avoid reading from Viper for path and URL funcs

The gain, given the "real sites benchmark" below, is obvious:

```
benchmark           old ns/op       new ns/op       delta
BenchmarkHugo-4     14497594101     13084156335     -9.75%

benchmark           old allocs     new allocs     delta
BenchmarkHugo-4     57404335       48282002       -15.89%

benchmark           old bytes       new bytes      delta
BenchmarkHugo-4     9933505624      9721984424     -2.13%
```

Fixes #2495
This commit is contained in:
Bjørn Erik Pedersen
2016-10-24 13:45:30 +02:00
committed by GitHub
parent dffd7da07c
commit a10b2cd372
26 changed files with 348 additions and 90 deletions

View File

@@ -101,8 +101,8 @@ func SanitizeURLKeepTrailingSlash(in string) string {
// Example:
// uri: Vim (text editor)
// urlize: vim-text-editor
func URLize(uri string) string {
sanitized := MakePathSanitized(uri)
func (p *PathSpec) URLize(uri string) string {
sanitized := p.MakePathSanitized(uri)
// escape unicode letters
parsedURI, err := url.Parse(sanitized)
@@ -147,7 +147,7 @@ func MakePermalink(host, plink string) *url.URL {
}
// AbsURL creates a absolute URL from the relative path given and the BaseURL set in config.
func AbsURL(in string, addLanguage bool) string {
func (p *PathSpec) AbsURL(in string, addLanguage bool) string {
url, err := url.Parse(in)
if err != nil {
return in
@@ -168,7 +168,7 @@ func AbsURL(in string, addLanguage bool) string {
}
if addLanguage {
prefix := getLanguagePrefix()
prefix := p.getLanguagePrefix()
if prefix != "" {
hasPrefix := false
// avoid adding language prefix if already present
@@ -191,15 +191,15 @@ func AbsURL(in string, addLanguage bool) string {
return MakePermalink(baseURL, in).String()
}
func getLanguagePrefix() string {
if !viper.GetBool("Multilingual") {
func (p *PathSpec) getLanguagePrefix() string {
if !p.multilingual {
return ""
}
defaultLang := viper.GetString("DefaultContentLanguage")
defaultInSubDir := viper.GetBool("DefaultContentLanguageInSubdir")
defaultLang := p.defaultContentLanguage
defaultInSubDir := p.defaultContentLanguageInSubdir
currentLang := viper.Get("CurrentContentLanguage").(*Language).Lang
currentLang := p.currentContentLanguage.Lang
if currentLang == "" || (currentLang == defaultLang && !defaultInSubDir) {
return ""
}
@@ -218,9 +218,9 @@ func IsAbsURL(path string) bool {
// RelURL creates a URL relative to the BaseURL root.
// Note: The result URL will not include the context root if canonifyURLs is enabled.
func RelURL(in string, addLanguage bool) string {
func (p *PathSpec) RelURL(in string, addLanguage bool) string {
baseURL := viper.GetString("BaseURL")
canonifyURLs := viper.GetBool("canonifyURLs")
canonifyURLs := p.canonifyURLs
if (!strings.HasPrefix(in, baseURL) && strings.HasPrefix(in, "http")) || strings.HasPrefix(in, "//") {
return in
}
@@ -232,7 +232,7 @@ func RelURL(in string, addLanguage bool) string {
}
if addLanguage {
prefix := getLanguagePrefix()
prefix := p.getLanguagePrefix()
if prefix != "" {
hasPrefix := false
// avoid adding language prefix if already present
@@ -288,8 +288,8 @@ func AddContextRoot(baseURL, relativePath string) string {
return newPath
}
func URLizeAndPrep(in string) string {
return URLPrep(viper.GetBool("UglyURLs"), URLize(in))
func (p *PathSpec) URLizeAndPrep(in string) string {
return URLPrep(p.uglyURLs, p.URLize(in))
}
func URLPrep(ugly bool, in string) string {