diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-11-27 08:46:58 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-11-27 09:13:16 +0100 |
commit | d162bbd7990b6a523bdadcd10bf60fcb43ecf270 (patch) | |
tree | ffba53b89c087ecc551e203c5d624a0c726fa14e /publisher | |
parent | 17e0bbe821b508cea936bcfd5c1c181bdb8ad70d (diff) |
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
Diffstat (limited to 'publisher')
-rw-r--r-- | publisher/htmlElementsCollector.go | 4 | ||||
-rw-r--r-- | publisher/htmlElementsCollector_test.go | 27 |
2 files changed, 30 insertions, 1 deletions
diff --git a/publisher/htmlElementsCollector.go b/publisher/htmlElementsCollector.go index e2f8fd2ca..b9b0f4e11 100644 --- a/publisher/htmlElementsCollector.go +++ b/publisher/htmlElementsCollector.go @@ -122,12 +122,14 @@ func (w *cssClassCollectorWriter) Write(p []byte) (n int, err error) { 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) } diff --git a/publisher/htmlElementsCollector_test.go b/publisher/htmlElementsCollector_test.go index 6b5ef9863..ab1529288 100644 --- a/publisher/htmlElementsCollector_test.go +++ b/publisher/htmlElementsCollector_test.go @@ -99,3 +99,30 @@ func TestClassCollector(t *testing.T) { } } + +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) + + } +} |