summaryrefslogtreecommitdiffstats
path: root/helpers/content.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-08-17 13:41:48 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-09-14 10:57:39 +0200
commitdd45e6d7e5406991d8df3a2f9ba4c7e5ae039c34 (patch)
tree0eaf4d028091ab7ee1c0997eb722442c0328c817 /helpers/content.go
parent4abaec5c045e92ae5f8b3a2dc66606b080ef6ea5 (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.go21
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()
}