BuidlZone-Labs/zicket-web

Unbounded In-Memory Cache Class Lacks Eviction & Serverless Persistence

Ouverte

#177 ouverte le 29 juil. 2026

 (13 commentaires) (0 réaction) (1 personne assignée)TypeScript (43 forks)auto 404
Stellar Wavedifficulty: mediumenhancementhelp wantedperformance

Métriques du dépôt

Stars
 (4 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

Category

Performance

Priority

Medium

Description

lib/cache.ts provides InMemoryCache using a static JS Map. In long-running node processes, key entries accumulate indefinitely without an LRU maximum capacity cap. In serverless deployment environments (Vercel Edge/Lambdas), static Map state is lost between cold starts and isolated per instance.

Evidence from lib/cache.ts#L18-L20:

class InMemoryCache {
  private static store = new Map<string, CacheEntry<unknown>>();
}

Proposed Solution

  1. Add an upper bound on key size and implement LRU (Least Recently Used) cache eviction.
  2. For production deployments, integrate Redis / Upstash or Next.js unstable_cache / fetch cache.

Acceptance Criteria

  • Cache map respects a configurable max capacity (e.g. 500 items).
  • Expired or old items are evicted automatically.
  • No unbounded memory growth.

Files

  • lib/cache.ts
  • lib/dataFetching.ts

Guide contributeur