mirror of
https://github.com/golang/go
synced 2024-09-28 19:24:29 -06:00
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>
This commit is contained in:
parent
08a68b73a4
commit
5cded8b3bf
@ -86,14 +86,20 @@ func hexEscapeNonASCII(s string) string {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
b := make([]byte, 0, newLen)
|
b := make([]byte, 0, newLen)
|
||||||
|
var pos int
|
||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
if s[i] >= utf8.RuneSelf {
|
if s[i] >= utf8.RuneSelf {
|
||||||
|
if pos < i {
|
||||||
|
b = append(b, s[pos:i]...)
|
||||||
|
}
|
||||||
b = append(b, '%')
|
b = append(b, '%')
|
||||||
b = strconv.AppendInt(b, int64(s[i]), 16)
|
b = strconv.AppendInt(b, int64(s[i]), 16)
|
||||||
} else {
|
pos = i + 1
|
||||||
b = append(b, s[i])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if pos < len(s) {
|
||||||
|
b = append(b, s[pos:]...)
|
||||||
|
}
|
||||||
return string(b)
|
return string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,3 +218,13 @@ func TestNoUnicodeStrings(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const redirectURL = "/thisaredirect细雪withasciilettersのけぶabcdefghijk.html"
|
||||||
|
|
||||||
|
func BenchmarkHexEscapeNonASCII(b *testing.B) {
|
||||||
|
b.ReportAllocs()
|
||||||
|
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
hexEscapeNonASCII(redirectURL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user