@cloudpss/ubjson 0.3.0-alpha.28 → 0.3.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/benchmark-string.js +12 -39
- package/dist/encoder.js +13 -23
- package/dist/encoder.js.map +1 -1
- package/dist/string-decoder.d.ts +2 -0
- package/dist/string-decoder.js +3 -3
- package/dist/string-decoder.js.map +1 -1
- package/dist/string-encoder.d.ts +6 -0
- package/dist/string-encoder.js +38 -0
- package/dist/string-encoder.js.map +1 -0
- package/package.json +2 -2
- package/src/encoder.ts +13 -24
- package/src/string-decoder.ts +3 -3
- package/src/string-encoder.ts +34 -0
- package/test/{string-decode.js → string-encoding.js} +26 -23
package/benchmark-string.js
CHANGED
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const decodeAscii = (() => {
|
|
4
|
-
try {
|
|
5
|
-
const fastDecodeAscii = String.fromCharCode.apply.bind(String.fromCharCode, String);
|
|
6
|
-
|
|
7
|
-
// 检查能否直接向 `String.fromCharCode.apply` 传入 `Uint8Array`
|
|
8
|
-
if ('\0\x01\x7f' === fastDecodeAscii(Uint8Array.from([0, 1, 0x7f]))) return fastDecodeAscii;
|
|
9
|
-
/* c8 ignore next 1 */
|
|
10
|
-
} catch {
|
|
11
|
-
/* c8 ignore next 2 */
|
|
12
|
-
}
|
|
13
|
-
return (array) => String.fromCharCode(...array);
|
|
14
|
-
})();
|
|
1
|
+
import { textDecoder, decodeAscii } from './dist/string-decoder.js';
|
|
15
2
|
|
|
16
3
|
function decode(data) {
|
|
17
4
|
if (data.every((b) => b < 128)) {
|
|
@@ -22,32 +9,19 @@ function decode(data) {
|
|
|
22
9
|
return textDecoder.decode(data);
|
|
23
10
|
}
|
|
24
11
|
|
|
25
|
-
const LOOP =
|
|
12
|
+
const LOOP = 500000;
|
|
26
13
|
|
|
27
14
|
const t = (time) => time.toFixed(10) + 'ms';
|
|
28
15
|
|
|
16
|
+
function createTestData(size) {
|
|
17
|
+
return new Uint8Array(size).fill(50);
|
|
18
|
+
}
|
|
19
|
+
|
|
29
20
|
/* eslint-disable no-console */
|
|
30
21
|
(async function () {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
new Uint8Array(20).fill(50),
|
|
34
|
-
new Uint8Array(30).fill(50),
|
|
35
|
-
new Uint8Array(40).fill(50),
|
|
36
|
-
new Uint8Array(50).fill(50),
|
|
37
|
-
new Uint8Array(60).fill(50),
|
|
38
|
-
new Uint8Array(70).fill(50),
|
|
39
|
-
new Uint8Array(80).fill(50),
|
|
40
|
-
new Uint8Array(90).fill(50),
|
|
41
|
-
new Uint8Array(100).fill(50),
|
|
42
|
-
new Uint8Array(110).fill(50),
|
|
43
|
-
new Uint8Array(120).fill(50),
|
|
44
|
-
new Uint8Array(130).fill(50),
|
|
45
|
-
new Uint8Array(140).fill(50),
|
|
46
|
-
new Uint8Array(150).fill(50),
|
|
47
|
-
new Uint8Array(200).fill(50),
|
|
48
|
-
];
|
|
22
|
+
for (let index = 50; index < 100; index++) {
|
|
23
|
+
const data = createTestData(index);
|
|
49
24
|
|
|
50
|
-
for (const data of testData) {
|
|
51
25
|
let decodeTime1 = 0;
|
|
52
26
|
let decodeTime2 = 0;
|
|
53
27
|
for (let i = 0; i < LOOP; i++) {
|
|
@@ -59,12 +33,11 @@ const t = (time) => time.toFixed(10) + 'ms';
|
|
|
59
33
|
decode(data);
|
|
60
34
|
decodeTime2 += performance.now() - start;
|
|
61
35
|
}
|
|
62
|
-
|
|
36
|
+
const ratio = decodeTime2 / decodeTime1;
|
|
63
37
|
console.log(
|
|
64
|
-
`Data: ${data.byteLength} \t${t(decodeTime1 / LOOP)} ${t(decodeTime2 / LOOP)} ${(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
).toFixed(3)}%`,
|
|
38
|
+
`Data: ${data.byteLength} \t${t(decodeTime1 / LOOP)} ${t(decodeTime2 / LOOP)} ${(ratio * 100).toFixed(
|
|
39
|
+
3,
|
|
40
|
+
)}%`,
|
|
68
41
|
);
|
|
69
42
|
}
|
|
70
43
|
})();
|
package/dist/encoder.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
2
2
|
import * as constants from './constants.js';
|
|
3
|
+
import { StringEncoder } from './string-encoder.js';
|
|
3
4
|
const INITIAL_SIZE = 1024 * 8; // 8 KiB
|
|
4
5
|
const MAX_SIZE = 1024 * 1024 * 128; //128 MiB
|
|
5
6
|
const RESIZE_FACTOR = 4;
|
|
6
7
|
const RESIZE_FACTOR_2 = 2;
|
|
7
|
-
const textEncoder = new TextEncoder();
|
|
8
8
|
/** 编码至 ubjson */
|
|
9
9
|
class Encoder {
|
|
10
10
|
constructor(value) {
|
|
11
11
|
this.value = value;
|
|
12
|
+
/** 字符串编码 */
|
|
13
|
+
this.stringEncoder = new StringEncoder();
|
|
12
14
|
/** 当前写指针位置 */
|
|
13
15
|
this.length = 0;
|
|
14
16
|
}
|
|
@@ -218,34 +220,22 @@ class Encoder {
|
|
|
218
220
|
/** writeStringData */
|
|
219
221
|
writeStringData(value) {
|
|
220
222
|
// 优化小字符串
|
|
221
|
-
if (value.length <
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
if (isAscii) {
|
|
231
|
-
this.writeInt(value.length);
|
|
232
|
-
this.ensureCapacity(value.length);
|
|
233
|
-
for (let index = 0; index < value.length; index++) {
|
|
234
|
-
const ch = value.charCodeAt(index);
|
|
235
|
-
this.buffer[this.length + index] = ch;
|
|
236
|
-
}
|
|
237
|
-
this.length += value.length;
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
223
|
+
if (value.length < 32) {
|
|
224
|
+
const buf = this.stringEncoder.encode(value);
|
|
225
|
+
this.writeInt(buf.length);
|
|
226
|
+
this.ensureCapacity(buf.length);
|
|
227
|
+
this.buffer.set(buf, this.length);
|
|
228
|
+
this.length += buf.length;
|
|
229
|
+
return;
|
|
240
230
|
}
|
|
241
|
-
if (
|
|
231
|
+
if (this.stringEncoder.encodeInto != null) {
|
|
242
232
|
const maxUsage = value.length * 3;
|
|
243
233
|
const currentPos = this.length;
|
|
244
234
|
// 先写入最大大小
|
|
245
235
|
const lengthWriter = this.writeInt(maxUsage);
|
|
246
236
|
this.ensureCapacity(maxUsage);
|
|
247
237
|
// 写入文本数据
|
|
248
|
-
const { written } =
|
|
238
|
+
const { written } = this.stringEncoder.encodeInto(value, this.buffer.subarray(this.length));
|
|
249
239
|
// 回溯,写入实际大小
|
|
250
240
|
this.length = currentPos;
|
|
251
241
|
lengthWriter.call(this, written);
|
|
@@ -253,7 +243,7 @@ class Encoder {
|
|
|
253
243
|
this.length += written;
|
|
254
244
|
return;
|
|
255
245
|
}
|
|
256
|
-
const data =
|
|
246
|
+
const data = this.stringEncoder.encode(value);
|
|
257
247
|
this.writeInt(data.length);
|
|
258
248
|
this.ensureCapacity(data.length);
|
|
259
249
|
this.buffer.set(data, this.length);
|
package/dist/encoder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"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"}
|
package/dist/string-decoder.d.ts
CHANGED
package/dist/string-decoder.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: false });
|
|
2
|
-
const decodeAscii = (() => {
|
|
1
|
+
export const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: false });
|
|
2
|
+
export const decodeAscii = (() => {
|
|
3
3
|
try {
|
|
4
4
|
const fastDecodeAscii = String.fromCharCode.apply.bind(String.fromCharCode, String);
|
|
5
5
|
// 检查能否直接向 `String.fromCharCode.apply` 传入 `Uint8Array`
|
|
@@ -14,7 +14,7 @@ const decodeAscii = (() => {
|
|
|
14
14
|
})();
|
|
15
15
|
/** 解码 */
|
|
16
16
|
function decode(data) {
|
|
17
|
-
if (data.byteLength <
|
|
17
|
+
if (data.byteLength < 50 && // 只有小字符串有优化价值,见 benchmark-string.js
|
|
18
18
|
data.every((b) => b < 128)) {
|
|
19
19
|
// 为 ASCII 字符串优化
|
|
20
20
|
return decodeAscii(data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-decoder.js","sourceRoot":"","sources":["../src/string-decoder.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"string-decoder.js","sourceRoot":"","sources":["../src/string-decoder.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE;IAC7B,IAAI;QACA,MAAM,eAAe,GAAkC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CACjF,MAAM,CAAC,YAAY,EACnB,MAAM,CAC8B,CAAC;QAEzC,sDAAsD;QACtD,IAAI,YAAY,KAAK,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,eAAe,CAAC;QAC5F,sBAAsB;KACzB;IAAC,MAAM;QACJ,sBAAsB;KACzB;IACD,OAAO,CAAC,KAAiB,EAAU,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC;AACxE,CAAC,CAAC,EAAE,CAAC;AAEL,SAAS;AACT,SAAS,MAAM,CAAC,IAAgB;IAC5B,IACI,IAAI,CAAC,UAAU,GAAG,EAAE,IAAI,oCAAoC;QAC5D,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAC5B;QACE,gBAAgB;QAChB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;KAC5B;IACD,SAAS;IACT,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,kBAAkB;AAClB,MAAM,OAAO,aAAa;IAA1B;QACI,aAAa;QACI,UAAK,GAAG;YACrB,SAAS;YACT,SAAS;YACT,IAAI,GAAG,EAAkB;YACzB,IAAI,GAAG,EAAkB;YACzB,IAAI,GAAG,EAAkB;YACzB,IAAI,GAAG,EAAkB;YACzB,IAAI,GAAG,EAAkB,EAAE,OAAO;SAC5B,CAAC;IA0Bf,CAAC;IAxBG,YAAY;IACZ,MAAM,CAAC,IAAgB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAuC,CAAC;QAC5D,uBAAuB;QACvB,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpC,0CAA0C;QAC1C,UAAU;QACV,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC5B,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,qBAAqB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,WAAW;QACX,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,GAAG,IAAI,GAAG,CAAC;YACX,GAAG,IAAI,IAAI,CAAC;SACf;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** 字符串编码器 */
|
|
2
|
+
export class StringEncoder extends TextEncoder {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.cache = new Map();
|
|
6
|
+
}
|
|
7
|
+
/** 编码字符串 */
|
|
8
|
+
encode(value) {
|
|
9
|
+
if (value.length > 16) {
|
|
10
|
+
return super.encode(value);
|
|
11
|
+
}
|
|
12
|
+
// 优化小字符串
|
|
13
|
+
let buf = this.cache.get(value);
|
|
14
|
+
if (buf == null) {
|
|
15
|
+
let isAscii = true;
|
|
16
|
+
for (let index = 0; index < value.length; index++) {
|
|
17
|
+
const ch = value.charCodeAt(index);
|
|
18
|
+
if (ch >= 128) {
|
|
19
|
+
isAscii = false;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (isAscii) {
|
|
24
|
+
buf = new Uint8Array(value.length);
|
|
25
|
+
for (let index = 0; index < value.length; index++) {
|
|
26
|
+
const ch = value.charCodeAt(index);
|
|
27
|
+
buf[index] = ch;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
buf = super.encode(value);
|
|
32
|
+
}
|
|
33
|
+
this.cache.set(value, buf);
|
|
34
|
+
}
|
|
35
|
+
return buf;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=string-encoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-encoder.js","sourceRoot":"","sources":["../src/string-encoder.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,MAAM,OAAO,aAAc,SAAQ,WAAW;IAA9C;;QACqB,UAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IA+B3D,CAAC;IA7BG,YAAY;IACH,MAAM,CAAC,KAAa;QACzB,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;YACnB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC9B;QACD,SAAS;QACT,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,IAAI,EAAE;YACb,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,EAAE,IAAI,GAAG,EAAE;oBACX,OAAO,GAAG,KAAK,CAAC;oBAChB,MAAM;iBACT;aACJ;YACD,IAAI,OAAO,EAAE;gBACT,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBACnC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;iBACnB;aACJ;iBAAM;gBACH,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC7B;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SAC9B;QACD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudpss/ubjson",
|
|
3
|
-
"version": "0.3.0-
|
|
3
|
+
"version": "0.3.0-beta.2",
|
|
4
4
|
"author": "CloudPSS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"prepublishOnly": "yarn build",
|
|
24
24
|
"clean": "rimraf dist",
|
|
25
25
|
"benchmark": "node ./benchmark",
|
|
26
|
-
"test": "c8 tape-es \"./test
|
|
26
|
+
"test": "c8 tape-es \"./test/**/*.js\""
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"c8": "^7.10.0",
|
package/src/encoder.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
2
2
|
import * as constants from './constants.js';
|
|
3
|
+
import { StringEncoder } from './string-encoder.js';
|
|
3
4
|
|
|
4
5
|
const INITIAL_SIZE = 1024 * 8; // 8 KiB
|
|
5
6
|
const MAX_SIZE = 1024 * 1024 * 128; //128 MiB
|
|
6
7
|
const RESIZE_FACTOR = 4;
|
|
7
8
|
const RESIZE_FACTOR_2 = 2;
|
|
8
9
|
|
|
9
|
-
const textEncoder = new TextEncoder();
|
|
10
|
-
|
|
11
10
|
/** 编码至 ubjson */
|
|
12
11
|
class Encoder {
|
|
12
|
+
/** 字符串编码 */
|
|
13
|
+
private stringEncoder = new StringEncoder();
|
|
13
14
|
/** 当前写指针位置 */
|
|
14
15
|
private length = 0;
|
|
15
16
|
/** 数据 */
|
|
@@ -238,34 +239,22 @@ class Encoder {
|
|
|
238
239
|
/** writeStringData */
|
|
239
240
|
private writeStringData(value: string): void {
|
|
240
241
|
// 优化小字符串
|
|
241
|
-
if (value.length <
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
if (isAscii) {
|
|
251
|
-
this.writeInt(value.length);
|
|
252
|
-
this.ensureCapacity(value.length);
|
|
253
|
-
for (let index = 0; index < value.length; index++) {
|
|
254
|
-
const ch = value.charCodeAt(index);
|
|
255
|
-
this.buffer[this.length + index] = ch;
|
|
256
|
-
}
|
|
257
|
-
this.length += value.length;
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
242
|
+
if (value.length < 32) {
|
|
243
|
+
const buf = this.stringEncoder.encode(value);
|
|
244
|
+
this.writeInt(buf.length);
|
|
245
|
+
this.ensureCapacity(buf.length);
|
|
246
|
+
this.buffer.set(buf, this.length);
|
|
247
|
+
this.length += buf.length;
|
|
248
|
+
return;
|
|
260
249
|
}
|
|
261
|
-
if (
|
|
250
|
+
if (this.stringEncoder.encodeInto != null) {
|
|
262
251
|
const maxUsage = value.length * 3;
|
|
263
252
|
const currentPos = this.length;
|
|
264
253
|
// 先写入最大大小
|
|
265
254
|
const lengthWriter = this.writeInt(maxUsage);
|
|
266
255
|
this.ensureCapacity(maxUsage);
|
|
267
256
|
// 写入文本数据
|
|
268
|
-
const { written } =
|
|
257
|
+
const { written } = this.stringEncoder.encodeInto(value, this.buffer.subarray(this.length));
|
|
269
258
|
// 回溯,写入实际大小
|
|
270
259
|
this.length = currentPos;
|
|
271
260
|
lengthWriter.call(this, written as number);
|
|
@@ -273,7 +262,7 @@ class Encoder {
|
|
|
273
262
|
this.length += written as number;
|
|
274
263
|
return;
|
|
275
264
|
}
|
|
276
|
-
const data =
|
|
265
|
+
const data = this.stringEncoder.encode(value);
|
|
277
266
|
this.writeInt(data.length);
|
|
278
267
|
this.ensureCapacity(data.length);
|
|
279
268
|
this.buffer.set(data, this.length);
|
package/src/string-decoder.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: false });
|
|
1
|
+
export const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: false });
|
|
2
2
|
|
|
3
|
-
const decodeAscii = (() => {
|
|
3
|
+
export const decodeAscii = (() => {
|
|
4
4
|
try {
|
|
5
5
|
const fastDecodeAscii: (array: Uint8Array) => string = String.fromCharCode.apply.bind(
|
|
6
6
|
String.fromCharCode,
|
|
@@ -19,7 +19,7 @@ const decodeAscii = (() => {
|
|
|
19
19
|
/** 解码 */
|
|
20
20
|
function decode(data: Uint8Array): string {
|
|
21
21
|
if (
|
|
22
|
-
data.byteLength <
|
|
22
|
+
data.byteLength < 50 && // 只有小字符串有优化价值,见 benchmark-string.js
|
|
23
23
|
data.every((b) => b < 128)
|
|
24
24
|
) {
|
|
25
25
|
// 为 ASCII 字符串优化
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** 字符串编码器 */
|
|
2
|
+
export class StringEncoder extends TextEncoder {
|
|
3
|
+
private readonly cache = new Map<string, Uint8Array>();
|
|
4
|
+
|
|
5
|
+
/** 编码字符串 */
|
|
6
|
+
override encode(value: string): Uint8Array {
|
|
7
|
+
if (value.length > 16) {
|
|
8
|
+
return super.encode(value);
|
|
9
|
+
}
|
|
10
|
+
// 优化小字符串
|
|
11
|
+
let buf = this.cache.get(value);
|
|
12
|
+
if (buf == null) {
|
|
13
|
+
let isAscii = true;
|
|
14
|
+
for (let index = 0; index < value.length; index++) {
|
|
15
|
+
const ch = value.charCodeAt(index);
|
|
16
|
+
if (ch >= 128) {
|
|
17
|
+
isAscii = false;
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (isAscii) {
|
|
22
|
+
buf = new Uint8Array(value.length);
|
|
23
|
+
for (let index = 0; index < value.length; index++) {
|
|
24
|
+
const ch = value.charCodeAt(index);
|
|
25
|
+
buf[index] = ch;
|
|
26
|
+
}
|
|
27
|
+
} else {
|
|
28
|
+
buf = super.encode(value);
|
|
29
|
+
}
|
|
30
|
+
this.cache.set(value, buf);
|
|
31
|
+
}
|
|
32
|
+
return buf;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import test from 'tape';
|
|
2
|
+
import { StringEncoder } from '../dist/string-encoder.js';
|
|
2
3
|
import { StringDecoder } from '../dist/string-decoder.js';
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
const encoder = new TextEncoder();
|
|
6
|
-
|
|
7
|
-
test('decode string', (t) => {
|
|
5
|
+
function testEncoding(t, encoder, decoder) {
|
|
8
6
|
t.equal(decoder.decode(encoder.encode('')), '');
|
|
9
7
|
t.equal(decoder.decode(encoder.encode('p4')), 'p4');
|
|
10
8
|
t.equal(decoder.decode(encoder.encode('t0')), 't0');
|
|
@@ -17,43 +15,48 @@ test('decode string', (t) => {
|
|
|
17
15
|
|
|
18
16
|
{
|
|
19
17
|
// 检查所有单字节
|
|
20
|
-
const actual = new Map();
|
|
21
|
-
const expected = new Map();
|
|
22
18
|
for (let index = 0; index < 0xffff; index++) {
|
|
23
19
|
// 跳过 Surrogate
|
|
24
20
|
if (index >= 0xd800 && index <= 0xdfff) continue;
|
|
25
|
-
const
|
|
26
|
-
actual
|
|
27
|
-
expected
|
|
21
|
+
const expected = String.fromCharCode(index);
|
|
22
|
+
const actual = decoder.decode(encoder.encode(expected));
|
|
23
|
+
if (expected !== actual) {
|
|
24
|
+
t.equal(actual, expected, `Check of ${index} failed`);
|
|
25
|
+
}
|
|
28
26
|
}
|
|
29
|
-
t.deepEqual(actual, expected);
|
|
30
27
|
}
|
|
31
28
|
|
|
32
29
|
{
|
|
33
30
|
// 检查所有代理项
|
|
34
|
-
const actual = new Map();
|
|
35
|
-
const expected = new Map();
|
|
36
31
|
for (let index = 0x10000; index < 0x10ffff; index++) {
|
|
37
|
-
const
|
|
38
|
-
actual
|
|
39
|
-
expected
|
|
32
|
+
const expected = String.fromCodePoint(index);
|
|
33
|
+
const actual = decoder.decode(encoder.encode(expected));
|
|
34
|
+
if (expected !== actual) {
|
|
35
|
+
t.equal(actual, expected, `Check of ${index} failed`);
|
|
36
|
+
}
|
|
40
37
|
}
|
|
41
|
-
t.deepEqual(actual, expected);
|
|
42
38
|
}
|
|
43
39
|
|
|
44
40
|
{
|
|
45
41
|
// 检查所有 2 字节 ASCII
|
|
46
|
-
const actual = new Map();
|
|
47
|
-
const expected = new Map();
|
|
48
42
|
for (let index = 0; index < 0x80; index++) {
|
|
49
43
|
for (let index2 = 0; index2 < 0x80; index2++) {
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
44
|
+
const expected = String.fromCharCode(index, index2);
|
|
45
|
+
const actual = decoder.decode(encoder.encode(expected));
|
|
46
|
+
if (expected !== actual) {
|
|
47
|
+
t.equal(actual, expected, `Check of ${index},${index2} failed`);
|
|
48
|
+
}
|
|
54
49
|
}
|
|
55
50
|
}
|
|
56
|
-
t.deepEqual(actual, expected);
|
|
57
51
|
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
test('encode string', (t) => {
|
|
55
|
+
testEncoding(t, new StringEncoder(), new TextDecoder('utf-8', { ignoreBOM: true, fatal: false }));
|
|
56
|
+
t.end();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('decode string', (t) => {
|
|
60
|
+
testEncoding(t, new TextEncoder(), new StringDecoder());
|
|
58
61
|
t.end();
|
|
59
62
|
});
|