[perf](trx-client): three quick-win optimizations
State deduplication via PartialEq + send_if_modified: Derive PartialEq on the full RigState / RigSnapshot type tree (Freq, Band, RigInfo, RigCapabilities, RigStatus, RigTxStatus, RigRxStatus, RigControl, RigVfo, RigVfoEntry, RigFilterState, RdsData, SpectrumData, RigState, RigSnapshot). Use state_tx.send_if_modified() in refresh_remote_snapshot() so WatchStream only wakes SSE /events subscribers when state actually changed; with a stable rig this eliminates ~1.3 spurious JSON serialisations per second per connected client. Cache-remote-rigs skip on unchanged list: cache_remote_rigs() was rebuilding the Vec and cloning every field on every 750 ms poll. Add a structural check (rig_id, display_name, initialized, audio_port) and return early when nothing has changed — the common steady-state case. RDS JSON pre-serialised at ingestion: SharedSpectrum.replace() now serialises the optional RDS object once and stores it alongside the Arc<SpectrumData> frame. Each /spectrum SSE client's 40 ms tick reads the cached string instead of calling serde_json::to_string() per-client per-tick. Add serde_json to trx-frontend Cargo.toml to support this. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -9,5 +9,6 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
bytes = "1"
|
||||
serde_json = { workspace = true }
|
||||
trx-core = { path = "../../trx-core" }
|
||||
tokio = { workspace = true, features = ["sync"] }
|
||||
|
||||
Reference in New Issue
Block a user