[ PROMPT_NODE_24312 ]
Snippets 常见陷阱
[ SKILL_DOCUMENTATION ]
# 常见问题与最佳实践
## 常见错误
### 1000: "Snippet execution failed"
运行时错误或语法错误。使用 try/catch 包裹代码:
javascript
try { return await fetch(request); }
catch (error) { return new Response(`Error: ${error.message}`, { status: 500 }); }
### 1100: "Exceeded execution limit"
代码 CPU 耗时超过 5ms。简化逻辑或迁移至 Workers。
### 1201: "Multiple origin fetches"
仅调用 `fetch(request)` 一次:
javascript
// ❌ 多次源站请求
const r1 = await fetch(request); const r2 = await fetch(request);
// ✅ 单次请求,复用响应
const response = await fetch(request);
### 1202: "Subrequest limit exceeded"
Pro 计划:2 次子请求,Business/Enterprise 计划:5 次。减少 fetch 调用。
### "Cannot set property on immutable object"
修改前先克隆:
javascript
const modifiedRequest = new Request(request);
modifiedRequest.headers.set("X-Custom", "value");
### "caches is not defined"
Snippets 中不支持 Cache API。请使用 Workers。
### "Module not found"
Snippets 不支持 `import`。请使用内联代码或 Workers。
## 最佳实践
### 性能
- 保持代码 <10KB (32KB 限制)
- 针对 5ms CPU 进行优化
- 仅在修改时克隆
- 最小化子请求
### 安全
- 验证所有输入
- 使用 Web Crypto API 进行哈希处理
- 在发送至源站前清理标头
- 不要记录密钥
### 调试
javascript
newResponse.headers.set("X-Debug-Country", request.cf.country);
bash
curl -H "X-Test: true" https://example.com -v
## 可用 API
**✅ 可用:** `fetch()`, `Request`, `Response`, `Headers`, `URL`, `crypto.subtle`, `crypto.randomUUID()`, `atob()`/`btoa()`, `JSON`
**❌ 不可用:** `caches`, `KV`, `D1`, `R2`, `Durable Objects`, `WebSocket`, `HTMLRewriter`, `import`, Node.js API
## 限制
| 资源 | 限制 |
|----------|-------|
| 片段大小 | 32KB |
| 执行时间 | 5ms CPU |
| 子请求 (Pro/Biz) | 2/5 |
| 每个区域片段数 | 20 |
## 性能基准
| 操作 | 时间 |
|-----------|------|
| 设置标头 | <0.1ms |
| URL 解析 | 5ms 时间、>5 次子请求、需要存储 (KV/D1/R2)、需要 npm 包、代码 >32KB