Test name | Executions per second |
---|---|
Uint8Array.from + codePointAt | 12.1 Ops/sec |
Uint8Array.from + charCodeAt | 12.9 Ops/sec |
for-loop + codePointAt | 9.8 Ops/sec |
for-loop + charCodeAt | 8.5 Ops/sec |
for-loop + Uint8Array.from + codePointAt (small chunk) | 8.7 Ops/sec |
for-loop + Uint8Array.from + charCodeAt (small chunk) | 8.7 Ops/sec |
for-loop + Uint8Array.from + codePointAt (big chunk) | 9.0 Ops/sec |
for-loop + Uint8Array.from + charCodeAt (big chunk) | 8.9 Ops/sec |
function get1024Bytes(n) {
const bytes = new Uint8Array(n * 1024);
for (let i = 0; i < bytes.length; i += 1) {
bytes[i] = Math.random() * 0xff;
}
return bytes;
}
const bytes = get1024Bytes(1024);
/*
Note that Function.prototype.apply() has a limit, so not using it to creat binary string here for convenience.
To use it, split the array into smaller chunks first.
String.fromCodePoint.apply(null, bytes); // bytes.length should not exceed the maximum
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
*/
const binString = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join("");
return Uint8Array.from(binString, (m) => m.codePointAt(0));
return Uint8Array.from(binString, (m) => m.charCodeAt(0));
const bytes = new Uint8Array(binString.length);
for (let i = 0; i < bytes.length; i += 1) {
bytes[i] = binString[i].codePointAt(0);
}
return bytes;
const bytes = new Uint8Array(binString.length);
for (let i = 0; i < bytes.length; i += 1) {
bytes[i] = binString[i].charCodeAt(0);
}
return bytes;
const QUANTUM = 128;
const bytes = new Uint8Array(binString.length);
for (let i = 0; i < binString.length; i += QUANTUM) {
let j = i;
for (const b of Uint8Array.from(binString.slice(i, i + QUANTUM), (m) => m.codePointAt(0))) {
bytes[j] = b;
j += 1;
}
}
return bytes;
const QUANTUM = 128;
const bytes = new Uint8Array(binString.length);
for (let i = 0; i < binString.length; i += QUANTUM) {
let j = i;
for (const b of Uint8Array.from(binString.slice(i, i + QUANTUM), (m) => m.charCodeAt(0))) {
bytes[j] = b;
j += 1;
}
}
return bytes;
const QUANTUM = 32768;
const bytes = new Uint8Array(binString.length);
for (let i = 0; i < binString.length; i += QUANTUM) {
let j = i;
for (const b of Uint8Array.from(binString.slice(i, i + QUANTUM), (m) => m.codePointAt(0))) {
bytes[j] = b;
j += 1;
}
}
return bytes;
const QUANTUM = 32768;
const bytes = new Uint8Array(binString.length);
for (let i = 0; i < binString.length; i += QUANTUM) {
let j = i;
for (const b of Uint8Array.from(binString.slice(i, i + QUANTUM), (m) => m.charCodeAt(0))) {
bytes[j] = b;
j += 1;
}
}
return bytes;