[Medium] 📄 HTTP Caching
1. What is HTTP caching and why is it important?
什么是 HTTP 缓存?为什么它很重要?
HTTP 缓存是一种在客户端(浏览器)或中间服务器暂时存储 HTTP 响应的技术,目的是在后续请求时可以直接使用缓存的数据,而不需要再次向服务器请求。
缓存 vs 暂存:有什么不同?
在中文技术文档中,这两个词经常被混用,但实际上有不同的含义:
Cache(缓存)
定义:为了性能优化而存储的数据副本,强调「重复使用」和「加速访问」。
特点:
- ✅ 目的是提升性能
- ✅ 数据 可以被重复使用
- ✅ 有明确的过期策略
- ✅ 通常是原始数据的副本
示例:
// HTTP Cache - 缓存 API 响应
Cache-Control: max-age=3600 // 缓存 1 小时
// Memory Cache - 缓存计算结果
const cache = new Map();
function fibonacci(n) {
if (cache.has(n)) return cache.get(n); // 重复使用缓存
const result = /* 计算 */;
cache.set(n, result);
return result;
}
Temporary Storage(暂存)
定义:临时存储的数据,强调「暂时性」和「会被清除」。
特点:
- ✅ 目的是临时保存
- ✅ 不一定会被重复使用
- ✅ 生命周期通常较短
- ✅ 可能包含中间状态
示例:
// sessionStorage - 暂存用户输入
sessionStorage.setItem('formData', JSON.stringify(form)); // 关闭标签页即清除
// 暂存文件上传
const tempFile = await uploadToTemp(file); // 处理完就删除
await processFile(tempFile);
await deleteTempFile(tempFile);
对照表
| 特性 | Cache(缓存) | Temporary Storage(暂存) |
|---|---|---|
| 主要目的 | 性能优化 | 临时保存 |
| 重复使用 | 是,多次读取 | 不一定 |
| 生命周期 | 根据策略决定 | 通常较短 |
| 典型用途 | HTTP Cache, Memory Cache | sessionStorage, 暂存文件 |
| 英文对应 | Cache | Temp / Temporary / Buffer |
实际应用中的区别
// ===== Cache(缓存)的使用场景 =====
// 1. HTTP 缓存:重复使用 API 响应
fetch('/api/users') // 第一次请求
.then((response) => response.json());
fetch('/api/users') // 第二次从缓存读取
.then((response) => response.json());
// 2. 计算结果缓存
const memoize = (fn) => {
const cache = new Map();
return (...args) => {
const key = JSON.stringify(args);
if (cache.has(key)) return cache.get(key); // 重复使用
const result = fn(...args);
cache.set(key, result);
return result;
};
};
// ===== Temporary Storage(暂存)的使用场景 =====
// 1. 表单数据暂 存(防止意外关闭)
window.addEventListener('beforeunload', () => {
sessionStorage.setItem('formDraft', JSON.stringify(formData));
});
// 2. 上传文件暂存
async function handleUpload(file) {
const tempPath = await uploadToTempStorage(file); // 暂存
const processed = await processFile(tempPath);
await deleteTempFile(tempPath); // 用完即删
return processed;
}
// 3. 中间计算结果暂存
const tempResults = []; // 暂存中间结果
for (const item of items) {
tempResults.push(process(item));
}
const final = combine(tempResults); // 用完就不需要了
在 Web 开发中的应用
// HTTP Cache(缓存)- 长期存储,重复使用
Cache-Control: public, max-age=31536000, immutable
// → 浏览器会缓存这个文件一年,重复使用
// sessionStorage(暂存)- 临时存储,关闭即清
sessionStorage.setItem('tempData', data);
// → 只在当前标签页有效,关闭就清除
// localStorage(长期存储)- 介于两者之间
localStorage.setItem('userPreferences', prefs);
// → 持久化存储,但不是为了性能优化
为什么区分这两个概念很重要?
-
设计决策:
- 需要性能优化? → 使用缓存
- 需要临时保存? → 使用暂存
-
资源管理:
- 缓存:注重命中率、过期策略
- 暂存:注重清理时机、容量限制
-
面试回答:
- 问「如何优化性能」→ 谈缓存策略
- 问「如何处理临时数据」→ 谈暂存方案
在本文中,我们主要讨论的是 Cache(缓存),特别是 HTTP 缓存机制。