Alan Guo Xiang Tan 4eee1320b0
PERF: Fix N+1 queries when serializing topic posters (#19545)
At the time of writing, this is how the `TopicPosterSerializer` looks
like:

```
class TopicPosterSerializer < ApplicationSerializer
  attributes :extras, :description

  has_one :user, serializer: PosterSerializer
  has_one :primary_group, serializer: PrimaryGroupSerializer
  has_one :flair_group, serializer: FlairGroupSerializer
end
```

Within `PosterSerializer`, the `primary_group` and `flair_group`
association is requested on the `user` object. However, the associations
have not been loaded on the `user` object at this point leading to the
N+1 queries problem. One may wonder
why the associations have not been loaded when the `TopicPosterSerializer`
has `has_one :primary_group` and `has_one :flair_group`. It turns out that `TopicPoster`
is just a struct containing the  `user`, `primary_group` and
`flair_group` objects. The `primary_group` and `flair_group`
ActiveRecord objects are loaded seperately in `UserLookup` and not preloaded when querying for
the users. This is done for performance reason so that we are able to
load the `primary_group` and `flair_group` records in a single query
without duplication.
2022-12-22 05:30:29 +08:00
..
2022-04-28 11:51:03 +02:00
2022-04-28 11:51:03 +02:00
2022-04-28 11:51:03 +02:00
2022-04-28 11:51:03 +02:00
2021-10-27 11:39:28 +03:00
2022-04-28 11:51:03 +02:00
2022-04-28 11:51:03 +02:00
2022-03-03 09:24:58 +08:00
2022-04-06 17:10:51 +02:00
2022-04-28 11:51:03 +02:00
2022-04-28 11:51:03 +02:00
2022-04-28 11:51:03 +02:00
2021-06-21 11:06:58 +08:00
2020-07-21 15:55:03 +08:00