Next中ISG和On-Demand Revalidation的关系

1、Incremental Static Generation (ISG)

Incremental Static Generation (ISG) 是 Next.js 中的一种静态页面生成策略,允许你为页面设置一个自动再生的时间间隔。通过 getStaticProps 函数中的 revalidate 参数,你可以定义页面在多长时间后再次生成。ISG 结合了静态生成和动态内容更新的优点,适合那些内容不需要频繁更新的页面。

工作流程:

1、页面初次生成:在构建时或首次访问页面时,Next.js 会生成静态页面,并将其缓存。
2、缓存命中:在 revalidate 时间间隔内,所有的访问都会返回缓存的静态页面。
3、页面再生:当超过 revalidate 时间间隔时,下次访问会触发页面再生,这个过程是在后台完成的,旧页面会一直服务直到新页面生成完成。

2、On-Demand Revalidation

On-Demand Revalidation 是对 ISG 的补充,允许开发者通过 API 路由手动触发页面的重新生成,而不需要等待 revalidate 时间间隔。这对那些内容需要即时更新的场景特别有用,比如在用户更新博客文章后立即反映在页面上。

工作流程:

1、手动触发:通过发送 API 请求到指定的路径,触发某个页面的重新生成。
2、立即再生:在接收到 API 请求后,Next.js 会立即重新生成指定的页面,并用新的内容替换旧的页面。

3、关系和区别

1、关系:

On-Demand Revalidation 是对 ISG 的扩展。ISG 提供了一个自动再生机制,通过设置固定的时间间隔来重新生成页面。而 On-Demand Revalidation 则允许开发者在需要时,通过 API 请求手动触发页面再生。

2、使用场景:

ISG 适合那些内容更新频率较低的页面,可以设定一个合理的时间间隔,让页面自动再生。
On-Demand Revalidation 适合那些需要即时内容更新的页面,比如内容管理系统(CMS),或者在用户提交内容后需要立即更新页面。

4、示例代码

使用 ISG 的页面:

export const getStaticProps: GetStaticProps = async () => {
  const data = await fetchData();

  return {
    props: {
      data,
    },
    revalidate: 60, // 每60秒后再生页面
  };
};

On-Demand Revalidation API 路由:

import { NextApiRequest, NextApiResponse } from 'next';

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  const { secret, path } = req.query;

  if (secret !== process.env.REVALIDATION_SECRET) {
    return res.status(401).json({ message: 'Invalid token' });
  }

  try {
    await res.revalidate(path as string);
    return res.json({ revalidated: true });
  } catch (err) {
    return res.status(500).json({ message: 'Error revalidating' });
  }
}

前端触发重新生成:

const revalidatePage = async () => {
  await fetch(`/api/revalidate?secret=your_secret_token&path=/blog/2024/07/large-3d-printing`);
};

5、总结

ISG 提供了一个自动化的页面更新机制,适用于那些不需要即时更新的场景。
On-Demand Revalidation 则为需要即时更新内容的场景提供了一种手动触发机制,使得内容可以在更新后立即反映在页面上。
两者结合使用,可以实现灵活而高效的静态内容管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值