]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
livereloadinject: Save some allocations
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 29 Oct 2023 17:03:36 +0000 (18:03 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 29 Oct 2023 17:37:05 +0000 (18:37 +0100)
As suggested by @DominoPivot

```
name                 old time/op    new time/op    delta
LiveReloadInject-10    1.11µs ± 2%    1.04µs ± 2%   -6.45%  (p=0.029 n=4+4)

name                 old alloc/op   new alloc/op   delta
LiveReloadInject-10    1.23kB ± 0%    0.89kB ± 0%  -27.69%  (p=0.029 n=4+4)

name                 old allocs/op  new allocs/op  delta
LiveReloadInject-10      12.0 ± 0%      10.0 ± 0%  -16.67%  (p=0.029 n=4+4)
```

transform/livereloadinject/livereloadinject.go

index 43c03348d233ac7fadc0d50634236ee963e935a8..1e21a92e64fc71caefc30c51fa24c2c8e66efba9 100644 (file)
@@ -25,12 +25,14 @@ import (
        "github.com/gohugoio/hugo/transform"
 )
 
-var ignoredSyntax = regexp.MustCompile(`(?s)^(?:\s+|<!--.*?-->|<\?.*?\?>)*`)
-var tagsBeforeHead = []*regexp.Regexp{
-       regexp.MustCompile(`(?is)^<!doctype\s[^>]*>`),
-       regexp.MustCompile(`(?is)^<html(?:\s[^>]*)?>`),
-       regexp.MustCompile(`(?is)^<head(?:\s[^>]*)?>`),
-}
+var (
+       ignoredSyntax  = regexp.MustCompile(`(?s)^(?:\s+|<!--.*?-->|<\?.*?\?>)*`)
+       tagsBeforeHead = []*regexp.Regexp{
+               regexp.MustCompile(`(?is)^<!doctype\s[^>]*>`),
+               regexp.MustCompile(`(?is)^<html(?:\s[^>]*)?>`),
+               regexp.MustCompile(`(?is)^<head(?:\s[^>]*)?>`),
+       }
+)
 
 // New creates a function that can be used to inject a script tag for
 // the livereload JavaScript at the start of an HTML document's head.
@@ -54,12 +56,12 @@ func New(baseURL url.URL) transform.Transformer {
                src += "&port=" + baseURL.Port()
                src += "&path=" + strings.TrimPrefix(path+"/livereload", "/")
 
-               c := make([]byte, len(b))
-               copy(c, b)
-
                script := []byte(fmt.Sprintf(`<script src="%s" data-no-instant defer></script>`, html.EscapeString(src)))
 
-               c = append(c[:idx], append(script, c[idx:]...)...)
+               c := make([]byte, len(b)+len(script))
+               copy(c, b[:idx])
+               copy(c[idx:], script)
+               copy(c[idx+len(script):], b[idx:])
 
                if _, err := ft.To().Write(c); err != nil {
                        loggers.Log().Warnf("Failed to inject LiveReload script:", err)