From b59d32f9bb5402b6607d0972a1af35c68028ab15 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Sat, 29 May 2021 20:04:09 +0200 Subject: [PATCH] :zap: improve asset caching --- src/Server.ts | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/Server.ts b/src/Server.ts index b1fe3c90..79a8bba3 100644 --- a/src/Server.ts +++ b/src/Server.ts @@ -10,7 +10,7 @@ import i18nextBackend from "i18next-node-fs-backend"; import { ErrorHandler } from "./middlewares/ErrorHandler"; import { BodyParser } from "./middlewares/BodyParser"; import express, { Router } from "express"; -import fetch from "node-fetch"; +import fetch, { Response } from "node-fetch"; import mongoose from "mongoose"; import path from "path"; @@ -28,6 +28,14 @@ declare global { } } +const assetCache = new Map< + string, + { + response: Response; + buffer: Buffer; + } +>(); + export class FosscordServer extends Server { public options: FosscordServerOptions; @@ -95,13 +103,21 @@ export class FosscordServer extends Server { this.app.get("/assets/:file", async (req, res) => { delete req.headers.host; - const response = await fetch(`https://discord.com/assets/${req.params.file}`, { - // @ts-ignore - headers: { - ...req.headers - } - }); - const buffer = await response.buffer(); + var response: Response; + var buffer: Buffer; + const cache = assetCache.get(req.params.file); + if (!cache) { + response = await fetch(`https://discord.com/assets/${req.params.file}`, { + // @ts-ignore + headers: { + ...req.headers + } + }); + buffer = await response.buffer(); + } else { + response = cache.response; + buffer = cache.buffer; + } response.headers.forEach((value, name) => { if ( @@ -120,6 +136,7 @@ export class FosscordServer extends Server { } res.set(name, value); }); + assetCache.set(req.params.file, { buffer, response }); return res.send(buffer); });