From 86115094924969eff35e846681c068cd0c07e198 Mon Sep 17 00:00:00 2001 From: leeeon233 Date: Fri, 8 Sep 2023 09:17:26 +0800 Subject: [PATCH] perf: snapshot OplogEncoded use iter --- crates/loro-internal/src/snapshot_encode.rs | 15 +++++++++++---- crates/loro-preload/src/encode.rs | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/crates/loro-internal/src/snapshot_encode.rs b/crates/loro-internal/src/snapshot_encode.rs index bbed38ee..565b3bdd 100644 --- a/crates/loro-internal/src/snapshot_encode.rs +++ b/crates/loro-internal/src/snapshot_encode.rs @@ -74,14 +74,14 @@ pub fn decode_oplog( let mut keys = state_arena.keywords; keys.append(&mut extra_arena.keywords); - let oplog_data = OplogEncoded::decode(data)?; + let oplog_data = OplogEncoded::decode_iter(data)?; let mut changes = Vec::new(); - let mut dep_iter = oplog_data.deps.iter(); - let mut op_iter = oplog_data.ops.iter(); + let mut dep_iter = oplog_data.deps; + let mut op_iter = oplog_data.ops; let mut counters = FxHashMap::default(); let mut text_idx = 0; - for change in oplog_data.changes.iter() { + for change in oplog_data.changes { let peer_idx = change.peer_idx as usize; let peer_id = common.peer_ids[peer_idx]; let timestamp = change.timestamp; @@ -284,6 +284,13 @@ impl OplogEncoded { .map_err(|e| LoroError::DecodeError(e.to_string().into_boxed_str())) } + fn decode_iter<'f: 'iter, 'iter>( + data: &'f FinalPhase, + ) -> Result<>::Iter, LoroError> { + serde_columnar::iter_from_bytes::(&data.oplog) + .map_err(|e| LoroError::DecodeError(e.to_string().into_boxed_str())) + } + fn encode(&self) -> Vec { to_vec(self).unwrap() } diff --git a/crates/loro-preload/src/encode.rs b/crates/loro-preload/src/encode.rs index 3a4f60c2..19c66cc7 100644 --- a/crates/loro-preload/src/encode.rs +++ b/crates/loro-preload/src/encode.rs @@ -84,7 +84,7 @@ impl<'a> FinalPhase<'a> { } } -#[columnar(ser, de)] +// #[columnar(ser, de)] #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct CommonArena<'a> { #[serde(borrow)]