diff options
| author | Adam Soltys <[email protected]> | 2026-10-02 10:09:28 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-10-02 10:09:28 -0700 |
| commit | 8249fbe964ae63fa5a34b150b2e5819972d93e5c (patch) | |
| tree | 93892b6c66818596abff896a12c378f703196aad /src/thread-cache.js | |
| parent | 98a1cb08eff9958d87c6d84462669d2a1990b21e (diff) | |
| download | coinosv3-8249fbe964ae63fa5a34b150b2e5819972d93e5c.tar.gz coinosv3-8249fbe964ae63fa5a34b150b2e5819972d93e5c.zip | |
Pictures paint with the page: column-sized copies, and CORS that works
Measured in the live tab (screencast frames): back from a profile, the
feed's text was on screen ~200ms before its photo. The <img> was loaded
and complete on the first frame — a 3024px, 12-megapixel original that
Chrome re-decodes whenever the page is rebuilt.
- Post photos wider than the column at 2x are painted from an 1100px
WebP copy made once (fetch, createImageBitmap, OffscreenCanvas) and
kept in Cache Storage; it decodes in a few ms, decoding=sync, inside
the same frame as the text. GIFs and small pictures keep the original;
the lightbox opens the original. Profile banners use the same copies,
warmed on prefetch.
- corsFetch: primal's CDN caches its no-Origin answer without
Vary: Origin, so a CORS fetch after the <img> got that header-less copy
and failed — which had written blossom.primal.net, m.primal.net and
coinos.io off as 'no CORS', so their avatars never got local
thumbnails and painted late from the originals. A refusal is now
retried once past the cache before a host is blamed; the old list is
dropped (nocors-v2).
- DM list: the unread dot sits centred at the row's end, like the
communities' below, instead of beside the time.
- Balance card gear: the icon alone, no circle.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Dmcrt9KyNDKVWFKnb8BREo
Diffstat (limited to 'src/thread-cache.js')
0 files changed, 0 insertions, 0 deletions
