mirror of
https://github.com/khairul169/code-share.git
synced 2025-04-28 16:49:36 +07:00
feat: add caching to thumbnail creator
This commit is contained in:
parent
fc1c1f4e29
commit
06b864055c
@ -1,24 +1,44 @@
|
||||
import { Request, Response } from "express";
|
||||
import { screenshot } from "../lib/screenshot";
|
||||
|
||||
const cache = new Map<string, Buffer>();
|
||||
const cache = new Map<string, { data: Buffer; timestamp: number }>();
|
||||
|
||||
export const thumbnail = async (req: Request, res: Response) => {
|
||||
const { slug } = req.params;
|
||||
const cacheData = cache.get(slug);
|
||||
const regenerateThumbnail = async (slug: string) => {
|
||||
const curCache = cache.get(slug);
|
||||
|
||||
if (cacheData) {
|
||||
res.contentType("image/jpeg");
|
||||
return res.send(cacheData);
|
||||
if (curCache?.data) {
|
||||
cache.set(slug, {
|
||||
data: curCache.data,
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
}
|
||||
|
||||
const result = await screenshot(slug);
|
||||
if (!result) {
|
||||
return res.status(400).send("Cannot generate thumbnail!");
|
||||
return curCache;
|
||||
}
|
||||
|
||||
cache.set(slug, result);
|
||||
const data = {
|
||||
data: result,
|
||||
timestamp: Date.now(),
|
||||
};
|
||||
|
||||
cache.set(slug, data);
|
||||
return data;
|
||||
};
|
||||
|
||||
export const thumbnail = async (req: Request, res: Response) => {
|
||||
const { slug } = req.params;
|
||||
let cacheData = cache.get(slug);
|
||||
|
||||
if (!cacheData) {
|
||||
cacheData = await regenerateThumbnail(slug);
|
||||
}
|
||||
|
||||
if (cacheData && Date.now() - cacheData.timestamp > 10000) {
|
||||
regenerateThumbnail(slug);
|
||||
}
|
||||
|
||||
res.contentType("image/jpeg");
|
||||
res.send(result);
|
||||
res.send(cacheData?.data);
|
||||
};
|
||||
|
@ -28,6 +28,7 @@ export const screenshot = async (slug: string) => {
|
||||
|
||||
closeHandler = setTimeout(() => {
|
||||
browser?.close();
|
||||
browser = null;
|
||||
closeHandler = null;
|
||||
}, 60000);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user