From 6b753b05d61f8583ea9b9f04cacb0d7cf5a69764 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Mon, 22 Mar 2021 22:28:09 +0900
Subject: [PATCH] perf(server): Cache user instance actor

---
 src/services/instance-actor.ts | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/services/instance-actor.ts b/src/services/instance-actor.ts
index 74591846fa..a6dadb0cd6 100644
--- a/src/services/instance-actor.ts
+++ b/src/services/instance-actor.ts
@@ -1,17 +1,27 @@
 import { createSystemUser } from './create-system-user';
 import { ILocalUser } from '../models/entities/user';
 import { Users } from '../models';
+import { Cache } from '../misc/cache';
 
 const ACTOR_USERNAME = 'instance.actor' as const;
 
+const cache = new Cache<ILocalUser>(Infinity);
+
 export async function getInstanceActor(): Promise<ILocalUser> {
+	const cached = cache.get(null);
+	if (cached) return cached;
+
 	const user = await Users.findOne({
 		host: null,
 		username: ACTOR_USERNAME
-	});
+	}) as ILocalUser | undefined;
 
-	if (user) return user as ILocalUser;
-
-	const created = await createSystemUser(ACTOR_USERNAME);
-	return created as ILocalUser;
+	if (user) {
+		cache.set(null, user);
+		return user;
+	} else {
+		const created = await createSystemUser(ACTOR_USERNAME) as ILocalUser;
+		cache.set(null, created);
+		return created;
+	}
 }