dendrite/roomserver/internal
Till 5267cc0f54
Optimise getting local members and membership counts (#3150)
The previous version was getting **ALL** membership events (as
`ClientEvents`, so going through `NewEventFromTrustedJSONWithID`) for a
given room.
Now we are querying only locally joined users as `ClientEvents`, which
should **significantly** reduce allocations.

Take for example a large room with 2k membership events, but only 1
local user - avoiding 1999 `NewEventFromTrustedJSONWithID` calls just to
calculate the `roomSize` which we can also query by other means.

This is also getting called for every `OutputRoomEvent` in the userAPI.

Benchmark with 1 local user and 100 remote users.
```
pkg: github.com/matrix-org/dendrite/userapi/consumers
cpu: 12th Gen Intel(R) Core(TM) i5-12500H
                    │   old.txt   │               new.txt               │
                    │   sec/op    │   sec/op     vs base                │
LocalRoomMembers-16   375.9µ ± 7%   327.6µ ± 6%  -12.85% (p=0.000 n=10)

                    │    old.txt    │               new.txt                │
                    │     B/op      │     B/op      vs base                │
LocalRoomMembers-16   79.426Ki ± 0%   8.507Ki ± 0%  -89.29% (p=0.000 n=10)

                    │   old.txt   │              new.txt               │
                    │  allocs/op  │ allocs/op   vs base                │
LocalRoomMembers-16   1015.0 ± 0%   277.0 ± 0%  -72.71% (p=0.000 n=10)
```
2023-07-13 14:19:08 +02:00
..
helpers Merge SenderID & Per Room User Key work (#3109) 2023-06-14 14:23:46 +00:00
input Add event size checks similar to Synapse (#3140) 2023-07-07 20:37:23 +02:00
perform Add pseudoID compatibility to Invites (#3126) 2023-07-06 15:15:24 +00:00
query Optimise getting local members and membership counts (#3150) 2023-07-13 14:19:08 +02:00
alias.go Add MXIDMapping for pseudoID rooms (#3112) 2023-06-28 20:29:49 +02:00
api.go Add pseudoID compatibility to Invites (#3126) 2023-07-06 15:15:24 +00:00