Repository navigation
v2.1.0 — Performance & Polish
Massive indexing/search speedup, overlay startup deadlock fixes, no blank window on first show, and crate rename.
Changelog (24 commits since v2.0.0)
Performance
- B-2: Pre-read ALL Tantivy segment files + SQLite DB into OS page cache — disk I/O eliminated from first keystroke
- B-4: Icon decode throttle — first 8 sync, rest deferred to background thread — show latency cut ~60%
- B-5:
recv_timeoutjitter + stop channel +select!instead of 50ms fixed poll — ~0.5ms idle wakeup eliminated - B-6: O(1) selection highlight via JS
rowMapMap lookup — constant-time toggling - B-7:
PostWebMessageAsJsonsends pre-serialized JSON, JS gets object directly — IPC ~3x faster - B-8: Conditional
scrollIntoViewonly when selected row outside visible area — less layout thrash - B-10:
RwLockreplacesMutex<CoreService>— concurrent reads, no reader contention - Search cache warmup on overlay show — Tantivy searched once before first keystroke
- Stale prune moved off search critical path to background thread
- Adaptive debounce — first char instant, rapid chars coalesced at 80ms
- Blocking
evaluate_scriptreplaced with fire-and-forgetPostWebMessageAsString
Bug Fixes
- Overlay hang after first indexing —
sync_indexes_from_cacheshort-circuits when indexes already populated - ~30s delay after indexing with files — FTS5
index_itemswraps inserts inBEGIN IMMEDIATE/COMMIT(was 9579 tiny segments) - Progress window deadlock —
drop(fts5_guard)beforemaybe_compact_backends() - Progress window white flash — Delays show 200ms until WebView2 paints
- Progress window acrylic — DWM rounded corners + acrylic blur
- Progress
evaluate_scriptre-enabled — Progress bar now actually updates - Blank window on first hotkey — Removed
panel-inCSS animation (160ms opacity fade caused blank on fast press) - Polling thread eliminated —
ControlFlow::Poll+ directAtomicU32read replaces separate thread - Warm-release timer — Single timer thread replaces per-Hide thread spawning
- Icon cache idle-trim — Dead code re-enabled, trims LRU icons when idle
- Everything SDK race + DLL planting — Robust Everything detection
Architecture
- Crate renamed
nex-cli→nex-launch(binary staysnex.exe) - GUI subsystem — No console flash at startup
- Cleanup: Remove vestigial
icon_cacheparam fromserve_asset/build_webview - Thread naming — All threads named for diagnostics
- Dead SVG icon deps removed
Commit Log
f8a6aafchore: bump to v2.1.07457373chore: rename crate nex-cli -> nex-launch3ed8a7dfix: avoid redundant FTS5/Tantivy re-index + progress window acrylic + first-show blank fixdf4996dfix: drop fts5_guard before maybe_compact_backends to prevent Mutex deadlockd213256fix: eliminate polling thread, use ControlFlow::Poll + direct AtomicU32 read41d8096perf(B2): pre-read ALL Tantivy segment files + SQLite DB into OS page cache909c5acfix: revert B-3 (manual JSON), keep serde_json; sync warmup before showbbceb9fdoc: mark all 10 bottlenecks as implemented4dc402eperf(B-7): PostWebMessageAsJson eliminates JS-side JSON.parse51f0cf9perf(B-6,B-8): O(1) selection via rowMap + conditional scrollIntoView6ef6db6perf(B-5): recv_timeout jitter — stop channel + select! instead of 50ms poll43287c4perf(B-4): icon decode throttle — first 8 sync, rest deferrede4f3cd4perf(B-10): replace Mutex with RwLock for concurrent readsf631fdaperf: warm Tantivy search cache on overlay showfaf9548perf: move stale prune off search critical path to background threadc3fe990perf: adaptive debounce — first char instant, rapid chars coalesced at 80ms60622fcperf: replace blocking evaluate_script with fire-and-forget PostWebMessageAsStringae1f0c2cleanup: remove vestigial icon_cache param from serve_asset / build_webview23335d1fix: replace per-Hide warm-release threads with single timer thread00c32fcfix: name icon-prefetch threads and COM-uninitialize on exit1afb6a3fix: icon cache idle-trim was dead code95e0555feat: GUI subsystem, no console flash + remove dead SVG icon deps73eccfbfix: EverythingBridge SDK race, DLL planting, is_service_running state clobber7018aecfix: stale prune skips backends, FTS5 startup clear, progress window hang