/api/art asked whether a feed or item names the image before anything else, cache hits included, and entries.image had no index: a sequential scan of entries, 571 ms on production, 50 at once for a page of images. A kept image is served first now, since it was only kept once let through, and entries.image has an index: hash on Postgres, whose btree refuses keys over about 2.7 KB. The Directory lists podcasts nobody here subscribes to, and their artwork was refused, so the page drew initials. ipx remembers the images the directory's listings and pages carry and lets those through too; any other address is still refused, so /api/art cannot be used to fetch arbitrary URLs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Fixed
|
||||
|
||||
- Artwork comes quickly: an image already kept is served without asking the database again, and the database finds which feed names an image by an index instead of reading every item, which took over half a second an image (#272).
|
||||
- The Directory shows the artwork of podcasts nobody on this server subscribes to, where it drew their initials (#273).
|
||||
- Artwork a publisher sends without an image type, or as `application/octet-stream`, is shown when it is a JPEG, PNG, GIF or WebP, instead of initials (#279).
|
||||
- A 429 from TypeSafe holds every call back as it asks, instead of the pass going on asking (#277).
|
||||
- Looking for items to read for Signals read every item on the server on each scan; it now reads only recent ones (#274).
|
||||
|
||||
Reference in New Issue
Block a user