-
Notifications
You must be signed in to change notification settings - Fork 30.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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: #12146 Ref: #12114 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Trevor Norris <trev.norris@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
- Loading branch information
1 parent
fb34d9c
commit 805ebef
Showing
2 changed files
with
61 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters