← 返回题目列表

ISR 增量静态再生成是什么?

中等 第 16 / 25 题 更新于 2026/07/28
SSRSSGISR静态生成

简化版

ISR 是增量静态再生成,介于 SSG 和 SSR 之间。页面先以静态 HTML 提供访问,过期后由服务端在后台重新生成新版本。它兼顾静态页面的访问性能和内容更新能力,适合大量内容页。

详细版

SSG 的问题是内容一多,全部重新构建成本高;SSR 的问题是每次请求都渲染,服务端压力大。

ISR 的思路:

  • 首次构建生成一部分页面。
  • 用户请求时直接返回静态 HTML。
  • 页面超过 revalidate 时间后触发再生成。
  • 新版本生成成功后替换旧缓存。
  • 生成期间用户仍可看到旧页面。

适合:

  • 商品详情。
  • 文章页。
  • 文档页。
  • 题库内容页。

不适合强实时、强个性化页面。

完整版教学

一、ISR 解决什么问题

纯 SSG 对内容型网站很友好,但如果页面有几十万,每次全量构建会很慢。

SSR 能实时生成,但流量大时服务器压力高。

ISR 试图折中:大多数时候返回静态缓存,必要时再增量更新。

二、工作流程

页面有一个重新验证时间。缓存未过期时,直接返回静态页面。过期后,用户请求可能先拿到旧页面,同时后台触发重新生成。

新页面生成成功后,后续请求就会拿到新版本。

这种策略牺牲一点实时性,换取高性能和低成本。

三、适用边界

ISR 适合允许短暂旧数据的页面。不适合股票实时行情、订单状态、个人中心这类强实时或强用户相关页面。

如果页面内容变更需要立即生效,可以结合按需 revalidate,由后台发布系统主动触发更新。

四、面试追问与工程落地

面试官可能问:“ISR 和缓存有什么区别?”

ISR 本质上结合了静态生成和缓存失效策略。它不仅缓存响应,还能在过期后重新生成页面产物。普通缓存通常不涉及页面重新构建逻辑。

工程中 ISR 要关注生成失败怎么办。通常旧页面继续可用,同时记录错误并重试。

五、时间窗口和请求行为要精确描述

不同框架的 ISR 触发细节并不完全相同,面试应先说明采用的实现模型。以“过期后首个请求拿旧页并触发后台再生成”为例:

0s 生成 v1 ───── 60s 有效 ───── 61s 请求拿 v1,并触发生成
                                  63s v2 成功
                                  64s 后请求拿 v2
状态用户得到什么系统动作
未生成fallback/阻塞生成/404,依框架配置生成首版
缓存新鲜当前静态页直接返回
缓存过期常见为旧页单飞后台再生成
再生成失败继续旧页记录、退避重试

如果 revalidate=60 秒,内容在第 1 秒更新,最坏可能陈旧约 60 秒再加生成时间;它不是每 60 秒准时后台构建,更不是强一致保证。

ISR 的核心交换:允许可量化的陈旧窗口,换取静态分发性能;先问业务能接受多旧,再设 revalidate。

六、规模收益、失效和缓存风暴

10 万页面每页构建 50ms,串行全量理论工作量约 5000 秒;实际可并行但仍消耗大量资源。若一天只有 1 万页面被访问,按需 ISR 可以把大部分冷页面生成成本推迟或消除。

多个请求同时命中过期页时必须 single-flight,只允许一个再生成任务,其他继续读旧页;否则 100 个并发请求会同时打后端和渲染,形成缓存击穿。生成结果要原子替换,失败不能覆盖健康旧版本。

按需失效应按内容依赖设计 tag/path。例如作者信息修改影响 500 篇文章,只失效作者页会留下旧署名;全站清空又会形成回源洪峰。内容系统需要维护“数据变更 → 受影响页面”的映射并支持重试。

内容发布事件 → 解析依赖 tag → 标记相关页面失效
→ 首次访问/后台任务再生成 → 原子替换 → 记录版本

七、常见误区与追问

  • 误区:ISR 会按固定间隔主动更新所有页面。 常见实现是在过期后的请求或事件中触发,具体依框架和平台而定。
  • 误区:设置 60 秒就保证内容最多旧 60 秒。 还要加触发等待、生成耗时、失败重试和 CDN 层缓存。
  • 误区:再生成失败应该删除旧页面。 通常保留最后成功版本更可用,并告警重试。
  • 追问:ISR 与 stale-while-revalidate 有何关系? 都可先给旧内容再后台更新,但 ISR 还运行页面生成逻辑并替换静态产物。
  • 追问:如何防止过期瞬间缓存击穿? 使用锁或 single-flight 合并同一页面再生成任务。
  • 追问:个性化页面为何不适合公共 ISR? 静态产物会跨用户复用,可能串数据且 key 爆炸。
  • 追问:内容发布怎样立即更新? 通过按需 revalidate/tag 失效触发,而不是只等待时间窗口。

八、加强记忆

  1. 定位:ISR 是带失效与再生成能力的静态页面策略。
  2. 交换条件:接受短暂陈旧,换 CDN 性能与较低渲染成本。
  3. 时间语义:revalidate 是重新验证门槛,不是准点更新承诺。
  4. 可用性:旧页继续服务,新页成功后原子替换,失败不污染缓存。
  5. 并发保护:同一路径再生成 single-flight,避免缓存击穿。
  6. 更新体系:时间失效加按需 tag/path 失效,并维护数据依赖映射。