From a18dd7b7882ca955075ad977a5e7838c792bb76f Mon Sep 17 00:00:00 2001 From: Karl Skomski Date: Thu, 3 Sep 2015 10:10:30 +0200 Subject: 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 Reviewed-By: Trevor Norris PR-URL: https://github.com/nodejs/node/pull/2539 --- benchmark/buffers/buffer-indexof.js | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 benchmark/buffers/buffer-indexof.js (limited to 'benchmark/buffers/buffer-indexof.js') 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', + ' 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); +} -- cgit v1.2.1