accounts: reduce initial load time even further

took the referralCache idea further and did it for all db queries. Now
take ~40ms for ~5000 users on arm64 through QEMU, and ~60ms on a
rockpro64.
This commit is contained in:
Harvey Tindall
2025-12-10 17:39:54 +00:00
parent a08a0fd3e6
commit 2e97142d9e
4 changed files with 153 additions and 50 deletions
+38 -2
View File
@@ -90,9 +90,45 @@ func (c *UserCache) MaybeSync(app *appContext) error {
startTime := time.Now()
cache := make([]respUser, len(users))
labels := map[string]bool{}
referralCache := app.getActiveReferrals()
emailCache := app.storage.EmailsByID()
expiryCache := app.storage.ExpiriesByID()
discordCache := app.storage.DiscordUsersByID()
telegramCache := app.storage.TelegramUsersByID()
matrixCache := app.storage.MatrixUsersByID()
referralCache := app.storage.ActiveReferralsByID()
for i, jfUser := range users {
cache[i] = app.userSummary(jfUser, &referralCache)
var emailPtr *EmailAddress = nil
if email, ok := emailCache[jfUser.ID]; ok {
emailPtr = &email
}
var expiryPtr *UserExpiry = nil
if expiry, ok := expiryCache[jfUser.ID]; ok {
expiryPtr = &expiry
}
var discordPtr *DiscordUser = nil
if discordEnabled {
if discord, ok := discordCache[jfUser.ID]; ok {
discordPtr = &discord
}
}
var telegramPtr *TelegramUser = nil
if telegramEnabled {
if telegram, ok := telegramCache[jfUser.ID]; ok {
telegramPtr = &telegram
}
}
var matrixPtr *MatrixUser = nil
if matrixEnabled {
if matrix, ok := matrixCache[jfUser.ID]; ok {
matrixPtr = &matrix
}
}
_, referralsActive := referralCache[jfUser.ID]
// cache[i] = app.userSummary(jfUser, &referralCache)
cache[i] = app.userSummary(jfUser, emailPtr, expiryPtr, discordPtr, telegramPtr, matrixPtr, referralsActive)
if cache[i].Label != "" {
labels[cache[i].Label] = true
}