livereloadinject: Save some allocations

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)
```
This commit is contained in:
Bjørn Erik Pedersen 2023-10-29 18:03:36 +01:00
parent 9dc608084b
commit 8f60c0c1ec

View file

@ -25,12 +25,14 @@ import (
"github.com/gohugoio/hugo/transform" "github.com/gohugoio/hugo/transform"
) )
var ignoredSyntax = regexp.MustCompile(`(?s)^(?:\s+|<!--.*?-->|<\?.*?\?>)*`) var (
var tagsBeforeHead = []*regexp.Regexp{ ignoredSyntax = regexp.MustCompile(`(?s)^(?:\s+|<!--.*?-->|<\?.*?\?>)*`)
regexp.MustCompile(`(?is)^<!doctype\s[^>]*>`), tagsBeforeHead = []*regexp.Regexp{
regexp.MustCompile(`(?is)^<html(?:\s[^>]*)?>`), regexp.MustCompile(`(?is)^<!doctype\s[^>]*>`),
regexp.MustCompile(`(?is)^<head(?:\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 // 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. // 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 += "&port=" + baseURL.Port()
src += "&path=" + strings.TrimPrefix(path+"/livereload", "/") 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))) 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 { if _, err := ft.To().Write(c); err != nil {
loggers.Log().Warnf("Failed to inject LiveReload script:", err) loggers.Log().Warnf("Failed to inject LiveReload script:", err)