diff options
| author | Andy Pan <panjf2000@gmail.com> | 2022-08-24 23:02:16 +0800 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-02-27 22:37:40 +0000 |
| commit | 5cded8b3bfb9d47a4e76e6ae8f4cfed15bf49666 (patch) | |
| tree | 78fcba4187e3b901446af6e9388f60bdb35bf66f /src/net/http/http.go | |
| parent | 08a68b73a4843dfe8c4896cace3242b895342511 (diff) | |
| download | go-5cded8b3bfb9d47a4e76e6ae8f4cfed15bf49666.tar.xz | |
net/http: reduce calls to append in hexEscapeNonASCII to gain a slight performance boost
goos: linux
goarch: amd64
pkg: net/http
cpu: DO-Premium-Intel
│ old │ new │
│ sec/op │ sec/op vs base │
HexEscapeNonASCII-4 469.6n ± 20% 371.1n ± 9% -20.98% (p=0.000 n=10)
│ old │ new │
│ B/op │ B/op vs base │
HexEscapeNonASCII-4 192.0 ± 0% 192.0 ± 0% ~ (p=1.000 n=10) ¹
¹ all samples are equal
│ old │ new │
│ allocs/op │ allocs/op vs base │
HexEscapeNonASCII-4 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
¹ all samples are equal
Change-Id: Ic8d2b3ddcf2cf724dec3f51a2aba205f2c6e4fe6
Reviewed-on: https://go-review.googlesource.com/c/go/+/425786
Reviewed-by: Than McIntosh <thanm@google.com>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Andy Pan <panjf2000@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Diffstat (limited to 'src/net/http/http.go')
| -rw-r--r-- | src/net/http/http.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/net/http/http.go b/src/net/http/http.go index 101799f574..9b81654fcc 100644 --- a/src/net/http/http.go +++ b/src/net/http/http.go @@ -86,14 +86,20 @@ func hexEscapeNonASCII(s string) string { return s } b := make([]byte, 0, newLen) + var pos int for i := 0; i < len(s); i++ { if s[i] >= utf8.RuneSelf { + if pos < i { + b = append(b, s[pos:i]...) + } b = append(b, '%') b = strconv.AppendInt(b, int64(s[i]), 16) - } else { - b = append(b, s[i]) + pos = i + 1 } } + if pos < len(s) { + b = append(b, s[pos:]...) + } return string(b) } |
