shithub: hugo

Download patch

ref: d162bbd7990b6a523bdadcd10bf60fcb43ecf270
parent: 17e0bbe821b508cea936bcfd5c1c181bdb8ad70d
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Fri Nov 27 03:46:58 EST 2020

publisher: Fix memory usage in writeStats

```
name                     old time/op    new time/op    delta
ClassCollectorWriter-16    72.1µs ± 0%    32.3µs ± 0%  -55.17%  (p=0.029 n=4+4)

name                     old alloc/op   new alloc/op   delta
ClassCollectorWriter-16    85.9kB ± 0%    35.1kB ± 0%  -59.16%  (p=0.029 n=4+4)

name                     old allocs/op  new allocs/op  delta
ClassCollectorWriter-16       329 ± 0%       149 ± 0%  -54.71%  (p=0.029 n=4+4)
```

Fixes #7945

--- a/publisher/htmlElementsCollector.go
+++ b/publisher/htmlElementsCollector.go
@@ -122,12 +122,14 @@
 						continue
 					}
 
+					key := s
+
 					s, tagName := w.insertStandinHTMLElement(s)
 					el := parseHTMLElement(s)
 					el.Tag = tagName
 
 					w.collector.mu.Lock()
-					w.collector.elementSet[s] = true
+					w.collector.elementSet[key] = true
 					if el.Tag != "" {
 						w.collector.elements = append(w.collector.elements, el)
 					}
--- a/publisher/htmlElementsCollector_test.go
+++ b/publisher/htmlElementsCollector_test.go
@@ -99,3 +99,30 @@
 	}
 
 }
+
+func BenchmarkClassCollectorWriter(b *testing.B) {
+	const benchHTML = `
+<html>
+<body id="i1" class="a b c d">
+<a class="c d e"></a>
+<br>
+<a class="c d e"></a>
+<a class="c d e"></a>
+<br>
+<a id="i2" class="c d e f"></a>
+<a id="i3" class="c d e"></a>
+<a class="c d e"></a>
+<br>
+<a class="c d e"></a>
+<a class="c d e"></a>
+<a class="c d e"></a>
+<a class="c d e"></a>
+</body>
+</html>
+`
+	for i := 0; i < b.N; i++ {
+		w := newHTMLElementsCollectorWriter(newHTMLElementsCollector())
+		fmt.Fprint(w, benchHTML)
+
+	}
+}