perf: eliminate unnecessary clones and pre-allocate collections

Three micro-optimizations with zero behavioral change:

1. timeline_collect.rs: Reorder format!() before enum construction so
   the owned String moves into the variant directly, eliminating
   .clone() on state, label, and milestone strings in StateChanged,
   LabelAdded/Removed, and MilestoneSet/Removed event paths.

2. pipeline.rs: Use Arc<str> for doc_hash shared across a document's
   chunks instead of cloning the full String per chunk. Also remove
   redundant embed_buf.reserve() since extend_from_slice already
   handles growth and the buffer is reused across iterations.

3. rrf.rs: Pre-allocate HashMap with combined vector+fts result count
   via with_capacity() to avoid rehashing during RRF score accumulation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Taylor Eernisse
2026-02-08 08:08:14 -05:00
parent cc11d3e5a0
commit 435a208c93
3 changed files with 25 additions and 32 deletions

View File

@@ -15,7 +15,8 @@ pub fn rank_rrf(vector_results: &[(i64, f64)], fts_results: &[(i64, f64)]) -> Ve
return Vec::new();
}
let mut scores: HashMap<i64, (f64, Option<usize>, Option<usize>)> = HashMap::new();
let mut scores: HashMap<i64, (f64, Option<usize>, Option<usize>)> =
HashMap::with_capacity(vector_results.len() + fts_results.len());
for (i, &(doc_id, _)) in vector_results.iter().enumerate() {
let rank = i + 1;