diff options
| author | Adam Soltys <[email protected]> | 2026-09-26 23:11:20 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-09-26 23:11:20 -0700 |
| commit | dbf755968827b0d75f5e30d35a6c90da3cdc1aa2 (patch) | |
| tree | 75ed7fa426994aec7407d7966e23eb353de17339 /src/app.js | |
| parent | b3df6e629a8d165ac2d6f9fb6c4962d47da0f0cf (diff) | |
| download | coinosv3-dbf755968827b0d75f5e30d35a6c90da3cdc1aa2.tar.gz coinosv3-dbf755968827b0d75f5e30d35a6c90da3cdc1aa2.zip | |
Feed scroll: stop re-parsing the whole messages state per row per repaint.
A CPU profile of a 44 s scroll on Adam's tab: 21 of 27 busy seconds in
loadFeatureState — every read parsed the multi-megabyte messages blob from
localStorage and re-hashed the seed for its key, and the mute/spam checks
read it for every row on every repaint. Now the cache key is hashed once
per identity, the messages state is parsed once per tick (a write refreshes
the copy; the copy is dropped on account switch), and the profile blob
stays parsed in memory and is written back once per burst instead of being
parsed and re-serialized for each of thirty profiles landing mid-scroll.
Videos preload metadata only: a window of autoplaying players was
streaming 20 MB during the same scroll.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VhUKyXKtsJ67QAFfb7QR9D
Diffstat (limited to 'src/app.js')
0 files changed, 0 insertions, 0 deletions
