import * as Y from 'yjs';
const ydoc = new Y.Doc()
const ytext = ydoc.getText('benchmark')
// Insert one million 'y' characters from right to left 100w item
for (let i = 0; i < 10000; i++) {
ytext.insert(0, 'y')
}
// transform ydoc to its binary representation
const encodedDocument = Y.encodeStateAsUpdateV2(ydoc)
const updateListJSON = Y.decodeUpdateV2(encodedDocument)
console.log('updateListJSON', updateListJSON['structs'].length) // item numbers
const docSize = encodedDocument.byteLength
console.log(`docSize: ${docSize} bytes`) // => ??? bytes
const start = Date.now()
const ydoc2 = new Y.Doc()
Y.applyUpdateV2(ydoc2, encodedDocument)
const parseTime = Date.now() - start
console.log(`parseTime: ${parseTime} ms`) // => 31 ms
ydoc.destroy()
1w个单字符y的item的apply:
numbers of item 10000
docSize: 10046 bytes
parseTime: 30 ms
1w个双字符he的item的apply:
numbers of item 10000
docSize: 20048 bytes
parseTime: 34 ms
10w个双字符he的item的apply:
numbers of item 100000
docSize: 200052 bytes
parseTime: 72 ms
文档字符数:7000
update存储占用字节:69K
占用内存字节数: 102669
存储所占字节大概10字=1K,yDoc占用字节与实际字符数相比体积大30%