1
0
Fork 0
mirror of https://github.com/Chocobozzz/PeerTube.git synced 2025-10-04 10:19:35 +02:00

Lazy load avatars

This commit is contained in:
Chocobozzz 2019-08-09 11:32:40 +02:00
parent c5407d7046
commit 557b13ae24
No known key found for this signature in database
GPG key ID: 583A612D890159BE
18 changed files with 324 additions and 92 deletions

View file

@ -4,13 +4,15 @@ import { logger } from '../helpers/logger'
import { UserModel } from '../models/account/user'
import { OAuthClientModel } from '../models/oauth/oauth-client'
import { OAuthTokenModel } from '../models/oauth/oauth-token'
import { CACHE } from '../initializers/constants'
import { LRU_CACHE } from '../initializers/constants'
import { Transaction } from 'sequelize'
import { CONFIG } from '../initializers/config'
import * as LRUCache from 'lru-cache'
type TokenInfo = { accessToken: string, refreshToken: string, accessTokenExpiresAt: Date, refreshTokenExpiresAt: Date }
let accessTokenCache: { [ accessToken: string ]: OAuthTokenModel } = {}
let userHavingToken: { [ userId: number ]: string } = {}
const accessTokenCache = new LRUCache<string, OAuthTokenModel>({ max: LRU_CACHE.USER_TOKENS.MAX_SIZE })
const userHavingToken = new LRUCache<number, string>({ max: LRU_CACHE.USER_TOKENS.MAX_SIZE })
// ---------------------------------------------------------------------------
@ -21,18 +23,20 @@ function deleteUserToken (userId: number, t?: Transaction) {
}
function clearCacheByUserId (userId: number) {
const token = userHavingToken[userId]
const token = userHavingToken.get(userId)
if (token !== undefined) {
accessTokenCache[ token ] = undefined
userHavingToken[ userId ] = undefined
accessTokenCache.del(token)
userHavingToken.del(userId)
}
}
function clearCacheByToken (token: string) {
const tokenModel = accessTokenCache[ token ]
const tokenModel = accessTokenCache.get(token)
if (tokenModel !== undefined) {
userHavingToken[tokenModel.userId] = undefined
accessTokenCache[ token ] = undefined
userHavingToken.del(tokenModel.userId)
accessTokenCache.del(token)
}
}
@ -41,19 +45,13 @@ function getAccessToken (bearerToken: string) {
if (!bearerToken) return Bluebird.resolve(undefined)
if (accessTokenCache[bearerToken] !== undefined) return Bluebird.resolve(accessTokenCache[bearerToken])
if (accessTokenCache.has(bearerToken)) return Bluebird.resolve(accessTokenCache.get(bearerToken))
return OAuthTokenModel.getByTokenAndPopulateUser(bearerToken)
.then(tokenModel => {
if (tokenModel) {
// Reinit our cache
if (Object.keys(accessTokenCache).length > CACHE.USER_TOKENS.MAX_SIZE) {
accessTokenCache = {}
userHavingToken = {}
}
accessTokenCache[ bearerToken ] = tokenModel
userHavingToken[ tokenModel.userId ] = tokenModel.accessToken
accessTokenCache.set(bearerToken, tokenModel)
userHavingToken.set(tokenModel.userId, tokenModel.accessToken)
}
return tokenModel