• littledan's avatar
    Optimize String.prototype.includes · d20a5090
    littledan authored
    This patch removes the MathMax call from String.prototype.includes
    in order to improve performance. With some quick and dirty benchmarking,
    (test case courtesy of the node folks) a sizable performance gain is visible:
    
    d8> function testIndexOf() { var stringArray = [ 'hello', 'world', '123', 'abc' ]; return stringArray.some(function(val, idx, arr) { return val.indexOf('world') !== -1 })}
    d8> function testIncludes() { var stringArray = [ 'hello', 'world', '123', 'abc' ]; return stringArray.some(function(val, idx, arr) { return val.includes('world') })}
    d8> function testTime(fn) { var before = Date.now(); fn(); return Date.now() - before; }
    d8> testTime(function() { for (var i = 0; i < 10000000; i++) { testIncludes() } })
    2244
    d8> testTime(function() { for (var i = 0; i < 10000000; i++) { testIndexOf() } })
    2212
    
    Compare that to before the test, when the performance difference was much larger:
    
    d8> testTime(function() { for (var i = 0; i < 10000000; i++) { testIndexOf() } })
    2223
    d8> testTime(function() { for (var i = 0; i < 10000000; i++) { testIncludes() } })
    2650
    
    In my runs, performance of both functions drifts up and down, but running them in quick
    succession back and forth shows a roughly consistent delta of about this magnitude.
    
    String.prototype.includes is still slightly (maybe 5%) slower than String.prototype.indexOf,
    but the effect is significantly reduced.
    
    R=adamk
    BUG=v8:3807
    LOG=Y
    
    Review URL: https://codereview.chromium.org/1231673008
    
    Cr-Commit-Position: refs/heads/master@{#29665}
    d20a5090
Name
Last commit
Last update
benchmarks Loading commit data...
build Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party/binutils Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
Makefile.nacl Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...