Slide 18
Slide 18 text
Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved.
2024
Deno Deploy で Web Cache API こう使う
import { FreshContext, PageProps } from "$fresh/server.ts";
import { Pagination } from "../components/Pagination.tsx";
import { CONSTS } from "../utils/consts.ts";
import { contentDigest, getNewsList, News } from "../utils/microcms.ts";
import { getWebCache } from "../utils/webCache.ts";
export const handler = {
GET: async function (req: Request, ctx: FreshContext) {
console.time("GET /");
const cache = await getWebCache();
const cached = await cache.match(req.url);
if (cached) {
console.log(`cache hit ${req.url}`);
console.timeEnd("GET /");
return cached;
}
console.log(`cache miss ${req.url}`);
const page = Number(ctx.url.searchParams.get("page")) || 1;
const newsListRes = await getNewsList(page);
if (!newsListRes.status) {
return ctx.renderNotFound({});
}
const res = await ctx.render({
newsList: newsListRes.contents,
currentPage: page,
totalCount: newsListRes.totalCount,
});
res.headers.set(
"Expires",
new Date(Date.now()
+ CONSTS.microCms.contentsExpiresIn * 1000)
.toUTCString(),
);
await cache.put(req.url, res.clone());
console.timeEnd("GET /");
return res;
},
};
キャッシュの引き当て
レンダリング結果を
キャッシュに設定