# Description
Does as it says on the tin! Adds caching for local, public and tag timelines. The public and local timelines are instance-level, i.e. they are not keyed by account. And the tag timeline cache introduces intelligent unloading of timelines after a certain amount of time since some 'last use'.
This also removes the caching of "prepared" API models from timeline caches. It turns out I forgot to recache prepared models each time they were prepared, so the (good) performance we were getting was already only relying on the initial model supplied on individual insert, which in most cases will likely have been unprepared anyway. Removing the caching of prepared models also gains us the performance improvement that we can *massively* reduce the number of invalidate calls we were making to timeline caches, which removes a boatload of mutex locking and hashmap lookups. And it makes it incredibly simple to have instance-wide caches for timelines, that later get filtered post-caching-stage depending on the account viewing it!
~~Depends: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4569~~
## Checklist
- [x] I/we have read the [GoToSocial contribution guidelines](https://codeberg.org/superseriousbusiness/gotosocial/src/branch/main/CONTRIBUTING.md).
- [x] I/we have discussed the proposed changes already, either in an issue on the repository, or in the Matrix chat.
- [x] I/we have not leveraged AI to create the proposed changes.
- [x] I/we have performed a self-review of added code.
- [x] I/we have written code that is legible and maintainable by others.
- [x] I/we have commented the added code, particularly in hard-to-understand areas.
- [ ] I/we have made any necessary changes to documentation.
- [ ] I/we have added tests that cover new code.
- [x] I/we have run tests and they pass locally with the changes.
- [x] I/we have run `go fmt ./...` and `golangci-lint run`.
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4582
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>