Yjs state vector:修订间差异
无编辑摘要 |
无编辑摘要 |
||
第3行: | 第3行: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="ts"> | ||
const toHexString = (bytes) => { | const toHexString = (bytes) => { | ||
return Array.from(bytes, (byte) => { | return Array.from(bytes, (byte) => { |
2024年10月15日 (二) 13:45的版本
Yjs has the ability to exchange only the differences when syncing two clients. We use lamport timestamps to identify structs and to track in which order a client created them. Each struct has an struct.id = { client: number, clock: number}
that uniquely identifies a struct. We define the next expected clock by each client as the state vector. This data structure is similar to the version vectors data structure. But we use state vectors only to describe the state of the local document, so we can compute the missing struct of the remote client. We do not use it to track causality.
[1]
const toHexString = (bytes) => {
return Array.from(bytes, (byte) => {
return ("0" + (byte & 0xff).toString(16)).slice(-2);
}).join("");
};
const doc = new Y.Doc();
console.log(toHexString(Y.encodeStateVector(doc)); // 00
root.insert(0, "Hello");
console.log(toHexString(Y.encodeStateVector(doc)); // 01edd5eaa70d05
root.insert(5, "World!");
console.log(toHexString(Y.encodeStateVector(doc)); // 01edd5eaa70d0b