• Rui Ueyama's avatar
    strings: add fast path to Replace · 14950d89
    Rui Ueyama authored
    genericReplacer.lookup is called for each byte of an input
    string. In many (most?) cases, lookup will fail for the first
    byte, and it will return immediately. Adding a fast path for
    that case seems worth it.
    
    Benchmark on my Xeon 3.5GHz Linux box:
    
    benchmark                        old ns/op    new ns/op    delta
    BenchmarkGenericNoMatch               2691          774  -71.24%
    BenchmarkGenericMatch1                7920         8151   +2.92%
    BenchmarkGenericMatch2               52336        39927  -23.71%
    BenchmarkSingleMaxSkipping            1575         1575   +0.00%
    BenchmarkSingleLongSuffixFail         1429         1429   +0.00%
    BenchmarkSingleMatch                 56228        55444   -1.39%
    BenchmarkByteByteNoMatch               568          568   +0.00%
    BenchmarkByteByteMatch                 977          972   -0.51%
    BenchmarkByteStringMatch              1669         1687   +1.08%
    BenchmarkHTMLEscapeNew                 422          422   +0.00%
    BenchmarkHTMLEscapeOld                 692          670   -3.18%
    BenchmarkByteByteReplaces             8492         8474   -0.21%
    BenchmarkByteByteMap                  2817         2808   -0.32%
    
    LGTM=rsc
    R=golang-codereviews, bradfitz, dave, rsc
    CC=golang-codereviews
    https://golang.org/cl/79200044
    14950d89
Name
Last commit
Last update
..
cmd Loading commit data...
lib9 Loading commit data...
libbio Loading commit data...
liblink Loading commit data...
pkg Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...
sudo.bash Loading commit data...