Remove the decoded-avatar hot set; respect Save-Data - #60
Merged
Merged
Conversation
A/B measurement against the live community showed warm and cold avatar decodes are identical at 1-2ms for thumbnail-sized media, so the 16 MiB decoded-element LRU bought nothing. Media preparation is now request warming only, the react-native-web Image model: fetch, decode(), release. Speculative warming is skipped under the Save-Data preference. Signed-off-by: Charlie Croom <ccroom@squareup.com> Co-authored-by: Amp <amp@ampcode.com> Signed-off-by: Charlie Croom <ccroom@squareup.com> Amp-Thread-ID: https://ampcode.com/threads/T-01a0a053-f85b-754c-a353-03fb77a26363
delkc
added a commit
that referenced
this pull request
Sep 15, 2026
* origin/main: Fix inline mention styling in channels (#74) Fix self-replenishing background channel warming (#71) Add links and thread previews (#42) Add shared receive-only channel and thread typing (#33) Warm channel heads in the background before they are opened (#54) Add Developer settings tab with cache clear and broker stats (#53) Request sized relay media for avatars (#58) Allow parallel browser development ports (#57) Add worktree bootstrap for local configuration (#56) Make thread opens part of navigation history (#55) Remove the decoded-avatar hot set; respect Save-Data (#60) Add CODEOWNERS reviewers (#61) Add guarded Workflows page and session capability (#48) Signed-off-by: Clay Delk <clay.delk@gmail.com> # Conflicts: # dev/relay-broker.mjs # src/bundled/channels/ChannelsPage.tsx # src/features/messages/ChannelTimeline.tsx # src/features/messages/MessageComposer.tsx # src/features/messages/MessageRow.tsx # src/features/messages/ThreadPanel.test.tsx # src/features/messages/ThreadPanel.tsx
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.
What
Removes the 16 MiB decoded-avatar hot set (the detached-
HTMLImageElementLRU increateMediaPreparation). Media preparation is now pure request warming, the react-native-web Image model: fetch,decode(), release — retention is delegated to the browser's own HTTP and decoded-image caches.Evidence that drove this: an A/B harness (mode toggle in the Developer tab on a stacked branch) measured against the live community relay showed warm and cold avatar decodes are identical at 1–2 ms p50 for thumbnail-sized media, and detached-image decode probes stayed under 2 ms even a minute after every JS reference dropped. The LRU cost up to 16 MiB of RAM and bought nothing measurable.
Also: when the browser reports
navigator.connection.saveData, all speculative warming is disabled — avatar preparation and the hover-driven speculative head read both early-return. Demand fetches are untouched.Validation
src/features/relay/media.test.ts: request warming without retention (decode called, nothing stored); in-flight dedupe; oversized-original decode skip with unchanged timer cleanup; Save-Data on → zero requests, off/absent → normal.pnpm typecheckand biome clean.Notes for review
<img>with the same URLs, so display behavior is unchanged by construction; only RAM changes.docs/channels.md's "bounded avatar preparation cache" line is updated to describe request warming.maindirectly.🤖 Description written by AI (Amp); commits signed off by the agent on Charlie Croom's behalf per DCO.