Skip to content

perf(core): allow versioned avatar URLs to be cached for 30 days - #64295

Open
pringelmann wants to merge 1 commit into
masterfrom
perf/61726/avatar-url-versioning
Open

pringelmann wants to merge 1 commit into
masterfrom
perf/61726/avatar-url-versioning

Conversation

@pringelmann

@pringelmann pringelmann commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Summary

Avatar URLs can now carry a ?v= version. With it, the response is cached for 30 days instead of 1.

The 1 day TTL means avatars get revalidated constantly, and a 304 here costs nearly as much as a 200 because the time goes into PHP bootstrap, not on sending the image itself. A big Talk call is a few hundred of those.

The version is bumped on avatar upload/removal, avatar scope changes, and enable/disable. Avatars that depend on v2-private keep the 1 day window, since one URL serves different bytes to different viewers.

?v= only widens the cache window, it never picks the image. A stale version still returns the current avatar.

Nothing sends it yet, so this is a no-op alone. Talk and @nextcloud/vue follow separately.

Trade-off

A bump only changes future URLs, it can't reach a cache that's already populated. So a deleted account's avatar can now linger in a browser for a month instead of a day. Same for one switched to v2-private. 7 days also works if there are privacy concerns.

Checklist

AI (if applicable)

  • The content of this PR was partly or fully generated using AI

@pringelmann pringelmann self-assigned this Sep 14, 2026
@pringelmann pringelmann added performance 🚀 3. to review Waiting for reviews feature: profile PRs or issues related to the Profile feature (e.g. Profile page, API, etc.) labels Sep 14, 2026
@pringelmann pringelmann added this to the Nextcloud 36 milestone Sep 14, 2026
@pringelmann
pringelmann marked this pull request as ready for review September 14, 2026 10:59
@pringelmann
pringelmann requested review from a team and provokateurin as code owners September 14, 2026 10:59
@pringelmann
pringelmann requested review from CarlSchwan, artonge, come-nc and icewind1991 and removed request for a team September 14, 2026 10:59

@artonge artonge left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good besides nitpick

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can probably do without a dedicated service for such logic.
If the version is the current timestamp, we can even do without the extra get.

Antreesy added a commit to nextcloud-libraries/nextcloud-router that referenced this pull request Sep 16, 2026
- provide a full match the backend's getAvatar() method:
  - `guestFallback` param (checked stable32 and newer)
  - `v` param (added in nextcloud/server#64295, not backported atm)
- copy and adjust test coverage from nextcloud/vue version for missing gap

Assisted-by: ClaudeCode:claude-sonnet-5
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
@pringelmann
pringelmann force-pushed the perf/61726/avatar-url-versioning branch 2 times, most recently from ad06f9d to 7341b37 Compare September 17, 2026 11:58
Signed-off-by: Peter Ringelmann <peter.ringelmann@nextcloud.com>
@pringelmann
pringelmann force-pushed the perf/61726/avatar-url-versioning branch from 7341b37 to 4f59168 Compare September 17, 2026 13:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

3. to review Waiting for reviews feature: profile PRs or issues related to the Profile feature (e.g. Profile page, API, etc.) performance 🚀

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improve avatar management to reduce load during large Talk calls

3 participants