Skip to content

Commit b17b5e2

Browse files
committed
Use TextDecoder for big toString('utf8')
1 parent 50cae94 commit b17b5e2

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

index.js

+9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ const customInspectSymbol =
1515
? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation
1616
: null
1717

18+
const decoderUTF8 = new TextDecoder('utf8')
19+
1820
exports.Buffer = Buffer
1921
exports.SlowBuffer = SlowBuffer
2022
exports.INSPECT_MAX_BYTES = 50
@@ -970,7 +972,14 @@ function base64Slice (buf, start, end) {
970972
}
971973
}
972974

975+
// For smaller buffers than this TextDecoder#decode appears
976+
// to have more overhead than doing it in Javascript directly.
977+
const TEXT_DECODER_THRESHOLD = 7000
978+
973979
function utf8Slice (buf, start, end) {
980+
if ((end - start) > TEXT_DECODER_THRESHOLD) {
981+
return decoderUTF8.decode(buf.slice(start, end))
982+
}
974983
end = Math.min(buf.length, end)
975984
const res = []
976985

perf/readUtf8.js

+20-10
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,25 @@ var suite = util.suite()
55
// 256 random bytes
66
var array = [ 152, 130, 206, 23, 243, 238, 197, 44, 27, 86, 208, 36, 163, 184, 164, 21, 94, 242, 178, 46, 25, 26, 253, 178, 72, 147, 207, 112, 236, 68, 179, 190, 29, 83, 239, 147, 125, 55, 143, 19, 157, 68, 157, 58, 212, 224, 150, 39, 128, 24, 94, 225, 120, 121, 75, 192, 112, 19, 184, 142, 203, 36, 43, 85, 26, 147, 227, 139, 242, 186, 57, 78, 11, 102, 136, 117, 180, 210, 241, 92, 3, 215, 54, 167, 249, 1, 44, 225, 146, 86, 2, 42, 68, 21, 47, 238, 204, 153, 216, 252, 183, 66, 222, 255, 15, 202, 16, 51, 134, 1, 17, 19, 209, 76, 238, 38, 76, 19, 7, 103, 249, 5, 107, 137, 64, 62, 170, 57, 16, 85, 179, 193, 97, 86, 166, 196, 36, 148, 138, 193, 210, 69, 187, 38, 242, 97, 195, 219, 252, 244, 38, 1, 197, 18, 31, 246, 53, 47, 134, 52, 105, 72, 43, 239, 128, 203, 73, 93, 199, 75, 222, 220, 166, 34, 63, 236, 11, 212, 76, 243, 171, 110, 78, 39, 205, 204, 6, 177, 233, 212, 243, 0, 33, 41, 122, 118, 92, 252, 0, 157, 108, 120, 70, 137, 100, 223, 243, 171, 232, 66, 126, 111, 142, 33, 3, 39, 117, 27, 107, 54, 1, 217, 227, 132, 13, 166, 3, 73, 53, 127, 225, 236, 134, 219, 98, 214, 125, 148, 24, 64, 142, 111, 231, 194, 42, 150, 185, 10, 182, 163, 244, 19, 4, 59, 135, 16 ]
77

8-
var browserBuffer = new BrowserBuffer(array)
9-
var nodeBuffer = new Buffer(array)
8+
function addTest(size) {
9+
let arr = array;
10+
for(var i = 0; i < size; i++) {
11+
arr = arr.concat(array);
12+
}
1013

11-
suite
12-
.add('BrowserBuffer#readUtf8', function () {
13-
browserBuffer.toString()
14-
})
14+
var browserBuffer = BrowserBuffer.from(arr)
15+
var nodeBuffer = Buffer.from(arr)
16+
suite
17+
.add('BrowserBuffer#readUtf8 ' + nodeBuffer.byteLength, function () {
18+
browserBuffer.toString()
19+
})
1520

16-
if (!process.browser) suite
17-
.add('NodeBuffer#readUtf8', function () {
18-
nodeBuffer.toString()
19-
})
21+
if (!process.browser) suite
22+
.add('NodeBuffer#readUtf8 ' + nodeBuffer.byteLength, function () {
23+
nodeBuffer.toString()
24+
})
25+
}
26+
27+
for(var i = 0; i < 6; i++) {
28+
addTest(i * 10);
29+
}

0 commit comments

Comments
 (0)