启用 Workers Cache,以便对同一水印图像的重复请求从缓存提供,而无需重新运行 Worker 或重新转换图像:
{
"cache": {
"enabled": true,
},
}[cache]
enabled = true然后在响应上设置 Cache-Control 标头以控制缓存生命周期:
export default {
async fetch(request, env) {
const watermarkKey = "my-watermark";
const sourceKey = "my-source-image";
const watermark = await env.NAMESPACE.get(watermarkKey, "stream");
const source = await env.BUCKET.get(sourceKey);
if (!watermark || !source) {
return new Response("Not found", { status: 404 });
}
const result = await env.IMAGES.input(source.body)
.draw(watermark)
.output({ format: "image/jpeg" });
const response = result.response();
return new Response(response.body, {
headers: {
...Object.fromEntries(response.headers),
"Cache-Control": "public, max-age=3600, stale-while-revalidate=86400",
},
});
},
};interface Env {
BUCKET: R2Bucket;
NAMESPACE: KVNamespace;
IMAGES: ImagesBinding;
}
export default {
async fetch(request, env): Promise<Response> {
const watermarkKey = "my-watermark";
const sourceKey = "my-source-image";
const watermark = await env.NAMESPACE.get(watermarkKey, "stream");
const source = await env.BUCKET.get(sourceKey);
if (!watermark || !source) {
return new Response("Not found", { status: 404 });
}
const result = await env.IMAGES.input(source.body)
.draw(watermark)
.output({ format: "image/jpeg" });
const response = result.response();
return new Response(response.body, {
headers: {
...Object.fromEntries(response.headers),
"Cache-Control": "public, max-age=3600, stale-while-revalidate=86400",
},
});
},
} satisfies ExportedHandler<Env>;