
1) 【一句话结论】在微信红包场景,通过合理应用HTTP缓存(减少重复请求)、请求合并(降低网络开销)、CDN(加速内容分发),可显著降低请求延迟,提升用户发红包的流畅度与响应速度。
2) 【原理/概念讲解】
Cache-Control/Expires头,浏览器直接从缓存读取,无需请求服务器)和协商缓存(通过If-Modified-Since/If-None-Match头,服务器判断是否更新,若未更新则返回304,减少数据传输)。类比:图书馆借书,强缓存是直接从书架拿,协商缓存是先问管理员是否更新,没更新就继续用旧书。3) 【对比与适用场景】
| 类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 强缓存 | 通过Cache-Control/Expires头 | 浏览器直接从缓存读取,无需请求 | 静态资源(如图片、配置文件) | 时间设置需合理,避免缓存过期导致数据不一致 |
| 协商缓存 | 通过If-Modified-Since/If-None-Match头 | 服务器判断是否更新,返回304 | 动态内容(如实时数据) | 需服务器支持版本控制(ETag) |
| 方法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| HTTP/2多路复用 | 同一TCP连接下并发传输多个请求 | 无需额外协议,高效 | HTTP/2支持的场景(如现代浏览器) | 请求头需正确配置,避免头部过大 |
| 前端批量请求 | 前端代码中封装多个请求体为JSON数组 | 适用于同域请求,简单实现 | 同域下的小请求合并 | 请求体过大可能影响性能,需分批 |
4) 【示例】(微信红包场景):
// 请求合并示例(HTTP/2)
const fetchPromises = [
fetch('/api/redpacket/config', { cache: 'no-cache' }),
fetch('/api/redpacket/users', { cache: 'no-cache' }),
fetch('/api/redpacket/generate', { body: JSON.stringify({ amount: 100, count: 5 }) })
];
Promise.all(fetchPromises).then(responses => {
// 处理响应
});
5) 【面试口播版答案】
“面试官您好,针对微信红包场景优化前端请求,核心是通过缓存减少重复请求、请求合并减少网络开销、CDN加速内容分发。具体来说,缓存方面,对静态配置(如红包规则、封面图片)采用强缓存(设置合理过期时间),动态数据用协商缓存(配合ETag),避免用户每次发红包都请求服务器;请求合并上,利用HTTP/2多路复用,把获取红包配置、用户列表、生成数据等小请求合并到同一个TCP连接,减少连接建立成本;CDN方面,静态资源部署到边缘节点,动态内容通过CDN边缘节点转发,降低网络延迟。这样能显著提升用户发红包的流畅度,减少卡顿。”
6) 【追问清单】
7) 【常见坑/雷区】