diff --git a/CHANGELOG.md b/CHANGELOG.md index e7f900509b1b9fbcfca39747842d2284cbd17dec..c8fd80063d51dee9abcc34e546e47e8b88271915 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,9 @@ - Fix: サーãƒãƒ¼ãƒ¡ãƒˆãƒªã‚¯ã‚¹ãŒ90度傾ã„ã¦ã„ã‚‹ - Fix: sparkle内ã«ãƒªãƒ³ã‚¯ã‚’入れるã¨ã‚¯ãƒªãƒƒã‚¯ä¸èƒ½ã«ãªã‚‹å•é¡Œã®ä¿®æ£ +### Server +- JSON.parse ã®å›žæ•°ã‚’削減ã™ã‚‹ã“ã¨ã§ã€ã‚¹ãƒˆãƒªãƒ¼ãƒŸãƒ³ã‚°ã®ãƒ‘フォーマンスをå‘上ã—ã¾ã—㟠+ ## 13.13.2 ### General diff --git a/packages/backend/src/server/api/StreamingApiServerService.ts b/packages/backend/src/server/api/StreamingApiServerService.ts index 4a0342d2b4489f05664a303eb1533f19e845d45e..e4291becf0bb00e2d7d256958dca7215578d927d 100644 --- a/packages/backend/src/server/api/StreamingApiServerService.ts +++ b/packages/backend/src/server/api/StreamingApiServerService.ts @@ -103,6 +103,13 @@ export class StreamingApiServerService { }); }); + const globalEv = new EventEmitter(); + + this.redisForSub.on('message', (_: string, data: string) => { + const parsed = JSON.parse(data); + globalEv.emit('message', parsed); + }); + this.#wss.on('connection', async (connection: WebSocket.WebSocket, request: http.IncomingMessage, ctx: { stream: MainStreamConnection, user: LocalUser | null; @@ -112,12 +119,11 @@ export class StreamingApiServerService { const ev = new EventEmitter(); - async function onRedisMessage(_: string, data: string): Promise<void> { - const parsed = JSON.parse(data); - ev.emit(parsed.channel, parsed.message); + function onRedisMessage(data: any): void { + ev.emit(data.channel, data.message); } - this.redisForSub.on('message', onRedisMessage); + globalEv.on('message', onRedisMessage); await stream.listen(ev, connection); @@ -137,7 +143,7 @@ export class StreamingApiServerService { connection.once('close', () => { ev.removeAllListeners(); stream.dispose(); - this.redisForSub.off('message', onRedisMessage); + globalEv.off('message', onRedisMessage); this.#connections.delete(connection); if (userUpdateIntervalId) clearInterval(userUpdateIntervalId); });