diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-03-18 10:49:14 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-03-18 10:52:54 +0900 |
| commit | 8aa089178a54559cbc4e4fe84a618fc7535f178c (patch) | |
| tree | 5f8cb6d5c51a37f4b667f7cd76d836f500cee1b4 /src/server/api | |
| parent | Improve API performance (diff) | |
| download | sharkey-8aa089178a54559cbc4e4fe84a618fc7535f178c.tar.gz sharkey-8aa089178a54559cbc4e4fe84a618fc7535f178c.tar.bz2 sharkey-8aa089178a54559cbc4e4fe84a618fc7535f178c.zip | |
Improve server performance
Diffstat (limited to 'src/server/api')
| -rw-r--r-- | src/server/api/authenticate.ts | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/server/api/authenticate.ts b/src/server/api/authenticate.ts index 7404c477fd..9c9ef74352 100644 --- a/src/server/api/authenticate.ts +++ b/src/server/api/authenticate.ts @@ -2,8 +2,11 @@ import isNativeToken from './common/is-native-token'; import { User } from '../../models/entities/user'; import { Users, AccessTokens, Apps } from '../../models'; import { AccessToken } from '../../models/entities/access-token'; +import { Cache } from '../../misc/cache'; -const cache = {} as Record<string, User>; +// TODO: TypeORMのカスタムキャッシュプロバイダを使っても良いかも +// ref. https://github.com/typeorm/typeorm/blob/master/docs/caching.md +const cache = new Cache<User>(1000 * 60 * 60); export default async (token: string): Promise<[User | null | undefined, AccessToken | null | undefined]> => { if (token == null) { @@ -11,8 +14,9 @@ export default async (token: string): Promise<[User | null | undefined, AccessTo } if (isNativeToken(token)) { - if (cache[token]) { // TODO: キャッシュされてから一定時間経過していたら破棄する - return [cache[token], null]; + const cached = cache.get(token); + if (cached) { + return [cached, null]; } // Fetch user @@ -23,7 +27,7 @@ export default async (token: string): Promise<[User | null | undefined, AccessTo throw new Error('user not found'); } - cache[token] = user; + cache.set(token, user); return [user, null]; } else { |