highlight: Avoid making unnecessary allocation
authorCameron Moore <moorereason@gmail.com>
Fri, 16 Oct 2020 18:27:09 +0000 (13:27 -0500)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 16 Oct 2020 19:14:02 +0000 (21:14 +0200)
Avoid creating a local copy of the highlight configuration when no
options are passed.

Benchmarks of building the docs site:

name        old time/op    new time/op    delta
DocsSite-2     1.94s ± 4%     1.93s ± 4%    ~     (p=0.841 n=5+5)

name        old alloc/op   new alloc/op   delta
DocsSite-2     666MB ± 1%     656MB ± 0%  -1.48%  (p=0.008 n=5+5)

name        old allocs/op  new allocs/op  delta
DocsSite-2     8.85M ± 0%     8.76M ± 0%  -1.04%  (p=0.029 n=4+4)

markup/highlight/highlight.go

index 2bd77af0b2aaeb963f80046b6e970e25ae22058c..4727843ccdd7f0b5629a1f9dd56cc35107cef16c 100644 (file)
@@ -37,12 +37,15 @@ type Highlighter struct {
 }
 
 func (h Highlighter) Highlight(code, lang, optsStr string) (string, error) {
+       if optsStr == "" {
+               return highlight(code, lang, h.cfg)
+       }
+
        cfg := h.cfg
-       if optsStr != "" {
-               if err := applyOptionsFromString(optsStr, &cfg); err != nil {
-                       return "", err
-               }
+       if err := applyOptionsFromString(optsStr, &cfg); err != nil {
+               return "", err
        }
+
        return highlight(code, lang, cfg)
 }