• Travis Bischel's avatar
    net/textproto: do not buffer a line if we know the next line is empty · f5b69503
    Travis Bischel authored
    readContinuedLineSlice intends to buffer a continued line of text, where
    a continued line can continue through newlines so long as the next line
    begins with a space or tab.
    
    The current optimization is to not try to buffer and build a line if we
    immediately see that the next line begins with an ASCII character.
    
    This adds avoiding copying the line if we see that the next line is \n
    or \r\n as well.
    
    Notably, headers always end in \r\n\r\n. In the general, well formatted
    header case, we can now avoid ever allocating textproto.Reader's
    internal reusable buf.
    
    This can mildly be seen in net/http's BenchmarkClientServer:
    
    name            old time/op    new time/op    delta
    ClientServer-4    66.4µs ± 0%    66.2µs ± 0%  -0.35%  (p=0.004 n=10+10)
    
    name            old alloc/op   new alloc/op   delta
    ClientServer-4    4.87kB ± 0%    4.82kB ± 0%  -1.01%  (p=0.000 n=6+10)
    
    name            old allocs/op  new allocs/op  delta
    ClientServer-4      64.0 ± 0%      63.0 ± 0%  -1.56%  (p=0.000 n=10+10)
    
    Change-Id: Id8c2ab69086ac481b90abda289396dcb7bfe8851
    Reviewed-on: https://go-review.googlesource.com/c/134227Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    f5b69503
Name
Last commit
Last update
..
header.go Loading commit data...
pipeline.go Loading commit data...
reader.go Loading commit data...
reader_test.go Loading commit data...
textproto.go Loading commit data...
writer.go Loading commit data...
writer_test.go Loading commit data...