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

IT技术 reactjs next.js
2021-04-22 06:58:01

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

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


例如:

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

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

用户 B在用户 A 之后不久点击页面,收到一个缓存版本,60 秒后他还会收到一个更新的版本。


我担心的是,每一个人的请求启动它的自己的60秒间隔重建。

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

如果有人可以自愿做出快速回应,我将非常感激。

1个回答

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

  • 第一个用户将在 100000000000 处访问该页面(以毫秒为单位的随机时间)
  • next.js 将缓存过期日期为 100000060000 的页面
  • 其他用户到达 100000040000,缓存有效,什么都不做(提供缓存页面)
  • 另一个访问者到达 100000070000,缓存已过期,next.js 将在后台重新验证页面,但用户仍然看到旧页面。
  • 最后一个访问者出现在 100000080000 并将使用新数据设置页面
  • 等等...

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

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

首先感谢您的回复!是否可以选择使用 SSG(因此没有 ISR 使用的自动重新验证)并强制 NextJS 在给定时间后重建所有页面,而不受缓存年龄和请求的影响?喜欢运行“npm run build”但不杀死活动实例?
2021-06-06 06:58:01
如果该页面每天有 1000 名访问者,它将构建数千次,从而消耗大量带宽和内存。
2021-06-10 06:58:01
我不认为有一种本地方式可以做到这一点,但是您可以设置 cron 作业
2021-06-17 06:58:01