edge-computing

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Edge Computing — Cloudflare Workers, Deno Deploy

边缘计算 — Cloudflare Workers、Deno Deploy

Compute global faible latence, proche utilisateur.
低延迟全局计算,贴近用户。

Platforms

平台

Cloudflare Workers — V8, 300+ POPs, KV/Durable
Deno Deploy — Deno, 30+ POPs, TypeScript
Vercel Edge — V8, 20+ POPs, Next.js
Fastly Compute@Edge — WASM, 70+ POPs
Cloudflare Workers — 基于V8引擎,拥有300+个POP节点,支持KV/Durable存储
Deno Deploy — 基于Deno,拥有30+个POP节点,支持TypeScript
Vercel Edge — 基于V8引擎,拥有20+个POP节点,适配Next.js
Fastly Compute@Edge — 基于WASM,拥有70+个POP节点

Geo-Routing

地理路由

javascript
export default {
  async fetch(req) {
    const api = req.cf.country === 'US' ? 'us-api' : 'eu-api';
    return fetch(`https://${api}.example.com${req.url}`);
  }
};
javascript
export default {
  async fetch(req) {
    const api = req.cf.country === 'US' ? 'us-api' : 'eu-api';
    return fetch(`https://${api}.example.com${req.url}`);
  }
};

Edge Caching (KV)

边缘缓存(KV)

javascript
const key = new URL(req.url).pathname;
let cached = await env.KV.get(key);
if (cached) return new Response(cached, { headers: { 'X-Cache': 'HIT' } });
const resp = await fetch('https://origin.com' + key);
const body = await resp.text();
await env.KV.put(key, body, { expirationTtl: 3600 });
return new Response(body, { headers: { 'X-Cache': 'MISS' } });
javascript
const key = new URL(req.url).pathname;
let cached = await env.KV.get(key);
if (cached) return new Response(cached, { headers: { 'X-Cache': 'HIT' } });
const resp = await fetch('https://origin.com' + key);
const body = await resp.text();
await env.KV.put(key, body, { expirationTtl: 3600 });
return new Response(body, { headers: { 'X-Cache': 'MISS' } });

A/B Testing

A/B测试

javascript
const variant = Math.random() < 0.5 ? 'A' : 'B';
resp.cookies.set('ab_test', variant);
javascript
const variant = Math.random() < 0.5 ? 'A' : 'B';
resp.cookies.set('ab_test', variant);

Bot Detection

机器人检测

javascript
if (/bot|crawler/i.test(req.headers.get('User-Agent'))) {
  return new Response('Forbidden', { status: 403 });
}
javascript
if (/bot|crawler/i.test(req.headers.get('User-Agent'))) {
  return new Response('Forbidden', { status: 403 });
}

Durable Objects (Stateful)

Durable Objects(有状态)

javascript
export class ChatRoom {
  async fetch(req) {
    const [client, server] = Object.values(new WebSocketPair());
    this.sessions.push(server); server.accept();
    server.on('message', e => this.broadcast(e.data));
    return new Response(null, { status: 101, webSocket: client });
  }
}
javascript
export class ChatRoom {
  async fetch(req) {
    const [client, server] = Object.values(new WebSocketPair());
    this.sessions.push(server); server.accept();
    server.on('message', e => this.broadcast(e.data));
    return new Response(null, { status: 101, webSocket: client });
  }
}

Constraints

限制条件

CPU 10-50ms → offload heavy
Memory 128MB → streaming
No FS → KV/R2

Voir
@.claude/skills/wasm/SKILL.md
CPU 10-50毫秒 → 卸载繁重任务
内存 128MB → 使用流式处理
无文件系统 → 使用KV/R2存储

详见
@.claude/skills/wasm/SKILL.md