diff options
author | Karl Skomski <karl@skomski.com> | 2015-09-03 10:10:30 +0200 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2015-10-07 21:09:53 -0700 |
commit | a18dd7b7882ca955075ad977a5e7838c792bb76f (patch) | |
tree | 29b747e1919cec49963ba6a55c55ca7607eda5b9 /benchmark/buffers/buffer-indexof.js | |
parent | aeee956ac73de7af914b747926168714fe4d1c4c (diff) | |
download | node-new-a18dd7b7882ca955075ad977a5e7838c792bb76f.tar.gz |
src: replace naive search in Buffer::IndexOf
Adds the string search implementation from v8
which uses naive search if pattern length < 8
or to a specific badness then uses Boyer-Moore-Horspool
Added benchmark shows the expected improvements
Added option to use ucs2 encoding with Buffer::IndexOf
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/2539
Diffstat (limited to 'benchmark/buffers/buffer-indexof.js')
-rw-r--r-- | benchmark/buffers/buffer-indexof.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/benchmark/buffers/buffer-indexof.js b/benchmark/buffers/buffer-indexof.js new file mode 100644 index 0000000000..c575f54b6a --- /dev/null +++ b/benchmark/buffers/buffer-indexof.js @@ -0,0 +1,38 @@ +var common = require('../common.js'); +var fs = require('fs'); + +var bench = common.createBenchmark(main, { + search: ['@', 'SQ', '10x', '--l', 'Alice', 'Gryphon', 'Panther', + 'Ou est ma chatte?', 'found it very', 'among mad people', + 'neighbouring pool', 'Soo--oop', 'aaaaaaaaaaaaaaaaa', + 'venture to go near the house till she had brought herself down to', + '</i> to the Caterpillar'], + encoding: ['undefined', 'utf8', 'ucs2', 'binary'], + type: ['buffer', 'string'], + iter: [1] +}); + +function main(conf) { + var iter = (conf.iter) * 100000; + var aliceBuffer = fs.readFileSync(__dirname + '/../fixtures/alice.html'); + var search = conf.search; + var encoding = conf.encoding; + + if (encoding === 'undefined') { + encoding = undefined; + } + + if (encoding === 'ucs2') { + aliceBuffer = new Buffer(aliceBuffer.toString(), encoding); + } + + if (conf.type === 'buffer') { + search = new Buffer(new Buffer(search).toString(), encoding); + } + + bench.start(); + for (var i = 0; i < iter; i++) { + aliceBuffer.indexOf(search, 0, encoding); + } + bench.end(iter); +} |