diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-08-17 13:41:48 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-09-14 10:57:39 +0200 |
commit | dd45e6d7e5406991d8df3a2f9ba4c7e5ae039c34 (patch) | |
tree | 0eaf4d028091ab7ee1c0997eb722442c0328c817 /helpers/content.go | |
parent | 4abaec5c045e92ae5f8b3a2dc66606b080ef6ea5 (diff) |
Lazy calculate WordCount, ReadingTime and FuzzyWordCount
This avoids having to execute these expensive operations for sites not using these values.
This commit sums up a set of wordcounting and autosummary related performance improvements.
The effect of these kind of depends on what features your site use, but a benchmark from 4 Hugo sites in the wild shows promise:
```
benchmark old ns/op new ns/op delta
BenchmarkHugo-4 21293005843 20032857342 -5.92%
benchmark old allocs new allocs delta
BenchmarkHugo-4 65290922 65186032 -0.16%
benchmark old bytes new bytes delta
BenchmarkHugo-4 9771213416 9681866464 -0.91%
```
Closes #2378
Diffstat (limited to 'helpers/content.go')
-rw-r--r-- | helpers/content.go | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/helpers/content.go b/helpers/content.go index 9d35675f7..f3d8bd94f 100644 --- a/helpers/content.go +++ b/helpers/content.go @@ -138,19 +138,28 @@ func StripHTML(s string) string { // Walk through the string removing all tags b := bp.GetBuffer() defer bp.PutBuffer(b) - - inTag := false + var inTag, isSpace, wasSpace bool for _, r := range s { - switch r { - case '<': + if !inTag { + isSpace = false + } + + switch { + case r == '<': inTag = true - case '>': + case r == '>': inTag = false + case unicode.IsSpace(r): + isSpace = true + fallthrough default: - if !inTag { + if !inTag && (!isSpace || (isSpace && !wasSpace)) { b.WriteRune(r) } } + + wasSpace = isSpace + } return b.String() } |