diff options
author | Alexey Orlenko <eaglexrlnk@gmail.com> | 2017-03-31 16:21:26 +0300 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2017-04-04 09:42:44 -0700 |
commit | e77a83f5a5184d42cf5bb9abe9c7ad50ee453399 (patch) | |
tree | 4635424f7985336c659c7a207554b1b28db36504 /benchmark | |
parent | 1e6186e9021dd7837a528dea75773749108b5cc4 (diff) | |
download | android-node-v8-e77a83f5a5184d42cf5bb9abe9c7ad50ee453399.tar.gz android-node-v8-e77a83f5a5184d42cf5bb9abe9c7ad50ee453399.tar.bz2 android-node-v8-e77a83f5a5184d42cf5bb9abe9c7ad50ee453399.zip |
buffer: optimize decoding wrapped base64 data
The fast base64 decoder used to switch to the slow one permanently when
it saw a whitespace or other garbage character. Since the most common
situation such characters may be encountered in is line-wrapped base64
data, a more profitable strategy is to decode a single 24-bit group with
the slow decoder and then continue running the fast algorithm.
PR-URL: https://github.com/nodejs/node/pull/12146
Ref: https://github.com/nodejs/node/issues/12114
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'benchmark')
-rw-r--r-- | benchmark/buffers/buffer-base64-decode-wrapped.js | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/benchmark/buffers/buffer-base64-decode-wrapped.js b/benchmark/buffers/buffer-base64-decode-wrapped.js new file mode 100644 index 0000000000..aa070ab55c --- /dev/null +++ b/benchmark/buffers/buffer-base64-decode-wrapped.js @@ -0,0 +1,26 @@ +'use strict'; + +const common = require('../common.js'); + +const bench = common.createBenchmark(main, { + n: [32], +}); + +function main(conf) { + const n = +conf.n; + const charsPerLine = 76; + const linesCount = 8 << 16; + const bytesCount = charsPerLine * linesCount / 4 * 3; + + const line = 'abcd'.repeat(charsPerLine / 4) + '\n'; + const data = line.repeat(linesCount); + // eslint-disable-next-line no-unescaped-regexp-dot + data.match(/./); // Flatten the string + const buffer = Buffer.alloc(bytesCount, line, 'base64'); + + bench.start(); + for (var i = 0; i < n; i++) { + buffer.base64Write(data, 0, bytesCount); + } + bench.end(n); +} |