概述目标:在Cloudflare边缘以Workers实现就近缓存与计算,减少回源,提高全球延迟表现与可用性。能力:`caches.default`、`fetch`的`cf`缓存选项、KV存储作为元数据或预渲染缓存。核心与实战Worker示例(优先命中边缘缓存,未命中则回源并写入缓存):export default {

async fetch(request, env, ctx) {

const cache = caches.default

const cacheKey = new Request(new URL(request.url), request)

let response = await cache.match(cacheKey)

if (!response) {

response = await fetch(request, {

cf: { cacheTtl: 300, cacheEverything: true }

})

// 设置响应头以便浏览器端也缓存

response = new Response(response.body, response)

response.headers.set('Cache-Control', 'public, max-age=300')

ctx.waitUntil(cache.put(cacheKey, response.clone()))

}

return response

}

}

KV作为预渲染/配置数据:export default {

async fetch(request, env) {

const path = new URL(request.url).pathname

const cachedHtml = await env.HTML_KV.get(path)

if (cachedHtml) {

return new Response(cachedHtml, { headers: { 'Content-Type': 'text/html', 'Cache-Control': 'public, max-age=600' } })

}

// 回源生成并写入KV

const html = `<html><body><h1>${path}</h1></body></html>`

await env.HTML_KV.put(path, html, { expirationTtl: 600 })

return new Response(html, { headers: { 'Content-Type': 'text/html' } })

}

}

`wrangler.toml`配置示例:name = "edge-cache"

main = "src/index.js"

compatibility_date = "2025-11-26"

[env.production]

route = "example.com/*"

workers_dev = false

[[kv_namespaces]]

binding = "HTML_KV"

id = "<your-kv-id>"

示例指定缓存键的标准化(去除查询参数):export default {

async fetch(request) {

const url = new URL(request.url)

url.search = ''

const key = new Request(url.toString(), request)

const hit = await caches.default.match(key)

if (hit) return hit

const resp = await fetch(url.toString(), { cf: { cacheTtl: 120 } })

await caches.default.put(key, resp.clone())

return resp

}

}

强制跳过缓存用于调试:fetch(request, { cf: { cacheTtl: 0, cacheEverything: false, cacheKey: undefined } })

验证与监控命中率与带宽:Cloudflare Analytics中观察`Cache Hit/Miss`、`Bandwidth Saved`。回源量与状态码分布:监控`Origin Requests`与4xx/5xx占比,确保缓存配置未导致错误传播。头部校验:浏览器与边缘响应头检查`CF-Cache-Status: HIT`/`MISS`与`Cache-Control`的TTL是否符合预期。常见误区未设置`cacheEverything`导致仅静态资源被缓存;动态页面需显式开启或通过Workers设置响应头与Cache API。缓存键混乱(含多余查询参数)导致命中率低;应规范化URL并自定义`cacheKey`。忽视KV一致性与写入延迟,将KV当强一致数据库使用;KV适合作为缓存/配置,不适合事务场景。结语结合Workers的计算与边缘缓存策略,可显著降低源站负载与全球延迟,并以Analytics验证命中率改进。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部