Skip to content

Commit 2ea0b4f

Browse files
committed
Improved html encoding performance for strings without special chars
1 parent 9d2af3a commit 2ea0b4f

File tree

1 file changed

+22
-27
lines changed

1 file changed

+22
-27
lines changed

htmlescapewriter.go

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -27,42 +27,37 @@ type htmlEscapeWriter struct {
2727
w io.Writer
2828
}
2929

30-
func (w *htmlEscapeWriter) Write(p []byte) (int, error) {
31-
i := 0
32-
ww := w.w
33-
var (
34-
b []byte
35-
err error
36-
n int
37-
)
38-
for j, c := range p {
39-
b = nil
30+
func (w *htmlEscapeWriter) Write(b []byte) (int, error) {
31+
write := w.w.Write
32+
j := 0
33+
for i, c := range b {
4034
switch c {
4135
case '<':
42-
b = strLT
36+
write(b[j:i])
37+
write(strLT)
38+
j = i + 1
4339
case '>':
44-
b = strGT
40+
write(b[j:i])
41+
write(strGT)
42+
j = i + 1
4543
case '"':
46-
b = strQuot
44+
write(b[j:i])
45+
write(strQuot)
46+
j = i + 1
4747
case '\'':
48-
b = strApos
48+
write(b[j:i])
49+
write(strApos)
50+
j = i + 1
4951
case '&':
50-
b = strAmp
51-
}
52-
if b != nil {
53-
if n, err = ww.Write(p[i:j]); err != nil {
54-
return i + n, err
55-
}
56-
if n, err = ww.Write(b); err != nil {
57-
return j, err
58-
}
59-
i = j + 1
52+
write(b[j:i])
53+
write(strAmp)
54+
j = i + 1
6055
}
6156
}
62-
if n, err = ww.Write(p[i:]); err != nil {
63-
return i + n, err
57+
if n, err := write(b[j:]); err != nil {
58+
return j + n, err
6459
}
65-
return len(p), nil
60+
return len(b), nil
6661
}
6762

6863
var (

0 commit comments

Comments
 (0)