From 2ebc04243c347ff0792ba703e073905c095a1d68 Mon Sep 17 00:00:00 2001 From: Liam Date: Wed, 9 Oct 2024 17:56:17 +0100 Subject: [PATCH] switch to a different cache with a ttl --- bun.lockb | Bin 295488 -> 296176 bytes projects/website/package.json | 3 +- .../(pages)/leaderboard/[...slug]/page.tsx | 24 +++++++++++++--- .../src/app/(pages)/player/[...slug]/page.tsx | 27 ++++++++++++++---- projects/website/src/common/image-utils.ts | 4 +-- 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/bun.lockb b/bun.lockb index c31ceb153b648025641468ee86d5e32633d4af18..13feb71e34373b6597afddc0add9944b9ff82688 100755 GIT binary patch delta 53613 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 QwyWgFEy-j%&-(g*01m|=k^lez diff --git a/projects/website/package.json b/projects/website/package.json index 9f0b0b0..f6ba20c 100644 --- a/projects/website/package.json +++ b/projects/website/package.json @@ -9,7 +9,6 @@ "lint": "next lint" }, "dependencies": { - "@ssr/common": "workspace:*", "@formkit/tempo": "^0.1.2", "@heroicons/react": "^2.1.5", "@hookform/resolvers": "^3.9.0", @@ -21,6 +20,7 @@ "@radix-ui/react-toast": "^1.2.1", "@radix-ui/react-tooltip": "^1.1.2", "@sentry/nextjs": "8", + "@ssr/common": "workspace:*", "@tanstack/react-query": "^5.55.4", "@uidotdev/usehooks": "^2.4.1", "chart.js": "^4.4.4", @@ -36,6 +36,7 @@ "next": "15.0.0-rc.0", "next-build-id": "^3.0.0", "next-themes": "^0.3.0", + "node-cache": "^5.1.2", "react": "19.0.0-rc-d5bba18b-20241009", "react-chartjs-2": "^5.2.0", "react-dom": "19.0.0-rc-d5bba18b-20241009", diff --git a/projects/website/src/app/(pages)/leaderboard/[...slug]/page.tsx b/projects/website/src/app/(pages)/leaderboard/[...slug]/page.tsx index 3c2d7cb..03fedda 100644 --- a/projects/website/src/app/(pages)/leaderboard/[...slug]/page.tsx +++ b/projects/website/src/app/(pages)/leaderboard/[...slug]/page.tsx @@ -2,10 +2,11 @@ import { Metadata, Viewport } from "next"; import { redirect } from "next/navigation"; import { Colors } from "@/common/colors"; import { getAverageColor } from "@/common/image-utils"; -import { cache } from "react"; import { LeaderboardData } from "@/components/leaderboard/leaderboard-data"; import { scoresaberService } from "@ssr/common/service/impl/scoresaber"; import ScoreSaberLeaderboardScoresPageToken from "@ssr/common/types/token/scoresaber/score-saber-leaderboard-scores-page-token"; +import NodeCache from "node-cache"; +import ScoreSaberLeaderboardToken from "@ssr/common/types/token/scoresaber/score-saber-leaderboard-token"; const UNKNOWN_LEADERBOARD = { title: "ScoreSaber Reloaded - Unknown Leaderboard", @@ -21,6 +22,14 @@ type Props = { }>; }; +type LeaderboardData = { + leaderboard: ScoreSaberLeaderboardToken | undefined; + scores: ScoreSaberLeaderboardScoresPageToken | undefined; + page: number; +}; + +const leaderboardCache = new NodeCache({ stdTTL: 60, checkperiod: 120 }); + /** * Gets the leaderboard data and scores * @@ -28,23 +37,30 @@ type Props = { * @param fetchScores whether to fetch the scores * @returns the leaderboard data and scores */ -const getLeaderboardData = cache(async ({ params }: Props, fetchScores: boolean = true) => { +const getLeaderboardData = async ({ params }: Props, fetchScores: boolean = true) => { const { slug } = await params; const id = slug[0]; // The leaderboard id const page = parseInt(slug[1]) || 1; // The page number + const cacheId = `${id}-${page}`; + if (leaderboardCache.has(cacheId)) { + return leaderboardCache.get(cacheId) as LeaderboardData; + } + const leaderboard = await scoresaberService.lookupLeaderboard(id); let scores: ScoreSaberLeaderboardScoresPageToken | undefined; if (fetchScores) { scores = await scoresaberService.lookupLeaderboardScores(id + "", page); } - return { + const leaderboardData = { page: page, leaderboard: leaderboard, scores: scores, }; -}); + leaderboardCache.set(cacheId, leaderboardData); + return leaderboardData; +}; export async function generateMetadata(props: Props): Promise { const { leaderboard } = await getLeaderboardData(props, false); diff --git a/projects/website/src/app/(pages)/player/[...slug]/page.tsx b/projects/website/src/app/(pages)/player/[...slug]/page.tsx index 731837b..f19057c 100644 --- a/projects/website/src/app/(pages)/player/[...slug]/page.tsx +++ b/projects/website/src/app/(pages)/player/[...slug]/page.tsx @@ -5,13 +5,13 @@ import { Metadata, Viewport } from "next"; import { redirect } from "next/navigation"; import { Colors } from "@/common/colors"; import { getAverageColor } from "@/common/image-utils"; -import { cache } from "react"; import { ScoreSort } from "@ssr/common/types/score/score-sort"; import { scoresaberService } from "@ssr/common/service/impl/scoresaber"; import ScoreSaberPlayerScoresPageToken from "@ssr/common/types/token/scoresaber/score-saber-player-scores-page-token"; -import { getScoreSaberPlayerFromToken } from "@ssr/common/types/player/impl/scoresaber-player"; +import ScoreSaberPlayer, { getScoreSaberPlayerFromToken } from "@ssr/common/types/player/impl/scoresaber-player"; import { config } from "../../../../../config"; import { cookies } from "next/headers"; +import NodeCache from "node-cache"; const UNKNOWN_PLAYER = { title: "ScoreSaber Reloaded - Unknown Player", @@ -27,6 +27,16 @@ type Props = { }>; }; +type PlayerData = { + player: ScoreSaberPlayer | undefined; + scores: ScoreSaberPlayerScoresPageToken | undefined; + sort: ScoreSort; + page: number; + search: string; +}; + +const playerCache = new NodeCache({ stdTTL: 60, checkperiod: 120 }); + /** * Gets the player data and scores * @@ -34,13 +44,18 @@ type Props = { * @param fetchScores whether to fetch the scores * @returns the player data and scores */ -const getPlayerData = cache(async ({ params }: Props, fetchScores: boolean = true) => { +const getPlayerData = async ({ params }: Props, fetchScores: boolean = true): Promise => { const { slug } = await params; const id = slug[0]; // The players id const sort: ScoreSort = (slug[1] as ScoreSort) || "recent"; // The sorting method const page = parseInt(slug[2]) || 1; // The page number const search = (slug[3] as string) || ""; // The search query + const cacheId = `${id}-${sort}-${page}-${search}`; + if (playerCache.has(cacheId)) { + return playerCache.get(cacheId) as PlayerData; + } + const playerToken = await scoresaberService.lookupPlayer(id); const player = playerToken && (await getScoreSaberPlayerFromToken(playerToken, config.siteApi, cookies().get("playerId")?.value)); @@ -54,14 +69,16 @@ const getPlayerData = cache(async ({ params }: Props, fetchScores: boolean = tru }); } - return { + const playerData = { sort: sort, page: page, search: search, player: player, scores: scores, }; -}); + playerCache.set(cacheId, playerData); + return playerData; +}; export async function generateMetadata(props: Props): Promise { const { player } = await getPlayerData(props, false); diff --git a/projects/website/src/common/image-utils.ts b/projects/website/src/common/image-utils.ts index ecb4c52..287a030 100644 --- a/projects/website/src/common/image-utils.ts +++ b/projects/website/src/common/image-utils.ts @@ -17,8 +17,8 @@ export function getImageUrl(originalUrl: string) { * @param src the image url * @returns the average color */ -export const getAverageColor = cache(async (src: string) => { +export const getAverageColor = async (src: string) => { return { hex: "#fff", }; -}); +};