增量静态再生中的重新验证过程如何工作?

Tim*_*ske 12 reactjs next.js

我有一个关于增量静态再生的问题。据我所知,函数revalidate中的值getStaticProps()告诉 Next.js 应该重建页面的时间。

我的问题是,在设定的时间后,每个用户/请求都会发生这种情况,还是从第一个用户/请求点击页面开始集中发生?


例如:

重新验证函数中的值getStaticProps()60 秒

用户 A点击页面并收到缓存版本。60 秒后,Next.js 为他重建页面并提供新内容。

用户 B在用户 A 之后不久访问页面,收到缓存版本,60 秒后他也收到更新版本。


我担心的是,每个单独的请求都会开始其自己的60 秒间隔来重建。

我很确定情况并非如此,但由于 Next.js 对我来说是新的,我想在把事情搞砸之前弄清楚这一点。

如果有人能自愿快速回复,我将非常感激。

Nic*_*ani 22

增量静态生成受到 stale-while-revalidate 的启发,因此没有间隔。
假设我们的重新验证值为 60 秒:

  • 第一个用户将在 100000000000 访问页面(随机时间以毫秒为单位)
  • next.js 将缓存过期日期为 100000060000 的页面
  • 其他用户来自 100000040000,缓存有效,不执行任何操作(提供缓存页面)
  • 另一个访问者来自 100000070000,缓存已过期,next.js 将在后台重新验证页面,但用户仍然看到旧页面。
  • 最后一位访问者来自 100000080000 并将使用新数据查看页面
  • 等等...

60 秒后,NextJS 为他重建页面并提供新内容。

所以这个概念是错误的,next.js 不会在 n 秒后重建页面,但对于每个请求,next.js 都会检查自上次请求以来经过的时间是否 > 缓存的到期日期。如果您的重新验证值为 1 秒,但下一个访问者在 1 年后到来,则下一个将在一年后重新生成页面。

  • 我不认为有一种本地方法可以做到这一点,但你可以设置 cron 作业 (3认同)
  • 如果该页面每天有 1000 名访问者,它将构建数千次,从而消耗大量带宽和内存。 (2认同)