summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorAlexey Orlenko <eaglexrlnk@gmail.com>2017-03-31 16:21:26 +0300
committerJames M Snell <jasnell@gmail.com>2017-04-04 09:42:44 -0700
commite77a83f5a5184d42cf5bb9abe9c7ad50ee453399 (patch)
tree4635424f7985336c659c7a207554b1b28db36504 /benchmark
parent1e6186e9021dd7837a528dea75773749108b5cc4 (diff)
downloadandroid-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.js26
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);
+}