Repository navigation
feat(perf): improve playlist responsiveness and playback rendering - #72
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Large playlists previously mounted every row, and elapsed playback updates repeatedly rendered the surrounding Library and playlist views. This change isolates transport progress, windows playlist rows, pauses hidden presentation, removes redundant startup/settings work, loads the selected window's code, and stops superseded importer refreshes. The largest measured gains are in playlist responsiveness and reduced React work.
Stepwise measurements
Each experiment was measured separately before and after its change, with three samples per comparison. Values below are medians; browser fixtures, filesystem microbenchmarks, and native measurements are separate experiments.
The importer still loads the complete current queue. Obsolete requests finish their pending page and stop before fetching more; existing publication guards reject stale results.
Native WebKit measurements
Release-mode Tauri builds compared the pre-step-1 baseline (
8868b59) with the combined final implementation (fea5335, packaged fromebaf788). Both used the real App and IPC, the same generated 4,000-track local Library and 4,100-entry playlist, and a 1120×688 content viewport. Host: Apple M4 Pro, 48 GiB RAM, macOS 26.6.2, WebKit 21624.5.1.11.3. Playback used digital silence at volume zero; no Spotify or Last.fm account was involved.Three samples per action. Mounted rows fell from 4,100 to 45–46. Measurements wait for populated rows where needed and two animation frames, producing an approximately 33 ms floor; they are not direct hardware scanout timings. This native comparison measures the combined changes, not each step's native contribution.
Three warm launches per variant, after discarding the initial launch, measured process start to populated Library plus two frames: 607.6 ms before (594.5–666.1), 616.4 ms after (604.1–638.3). There is no demonstrated startup improvement; these are not cold-storage measurements.
Paused CPU and memory observations after the playlist workload:
CPU 100% represents one core. Each state has three consecutive five-second samples covering the app and its attributed WebKit services. No idle CPU saving was demonstrated. Lower footprint snapshots are encouraging but depend on garbage collection and window state: these are single-process-lifetime observations, not independent memory trials, unique system memory, or peak usage. The paused CPU scenario did not exercise an actively scrolling title.
Validation and evidence
Full measurement protocol, per-step revisions, assessment, and raw JSON.