静态站点生成与优化

class SSG,ISR

在 Next.js 中,静态站点生成(SSG)和增量静态生成(ISR)是构建高性能静态网站的重要功能。以下是这两个概念的详细介绍,以及如何优化图片加载。


1. 静态站点生成(SSG)

静态站点生成是在构建时生成 HTML 文件,适合不经常变动的内容。

1.1 使用 getStaticProps() 生成静态页面

使用 getStaticProps() 获取数据并在构建时生成静态页面。

代码示例

export default function Blog({ posts }) {
  return (
    <div>
      <h1>Blog Posts</h1>
      <ul>
        {posts.map((post) => (
          <li key={post.id}>{post.title}</li>
        ))}
      </ul>
    </div>
  );
}

export async function getStaticProps() {
  const res = await fetch('https://jsonplaceholder.typicode.com/posts');
  const posts = await res.json();

  return {
    props: {
      posts,
    },
  };
}

1.2 说明

  • 该页面在构建时调用 getStaticProps(),获取数据并生成静态 HTML。
  • 生成的页面在部署后可以快速响应用户请求。

2. 增量静态生成(ISR)

增量静态生成允许你在页面构建后继续更新静态内容,结合 revalidate 属性实现。

2.1 使用 revalidate 实现 ISR

通过设置 revalidate,可以指定多长时间后重新生成页面。

代码示例

export async function getStaticProps() {
  const res = await fetch('https://jsonplaceholder.typicode.com/posts');
  const posts = await res.json();

  return {
    props: {
      posts,
    },
    revalidate: 10, // 每 10 秒重新生成一次页面
  };
}

2.2 说明

  • 在用户请求页面时,如果缓存过期,Next.js 将在后台重新生成页面。
  • 这使得你可以在保持静态生成速度的同时,确保页面内容保持更新。

3. 使用 Image 组件优化图片加载

Next.js 提供的 Image 组件有助于优化图片加载,支持自动调整大小、懒加载和更高效的格式。

3.1 使用 next/image 组件

通过 next/image 组件,可以实现更好的图片加载性能。

代码示例

import Image from 'next/image';

export default function Home() {
  return (
    <div>
      <h1>My Optimized Image</h1>
      <Image 
        src="/path/to/image.jpg" 
        alt="Description" 
        width={500} 
        height={300} 
        priority // 优先加载此图像
      />
    </div>
  );
}

3.2 说明

  • 自动优化Image 组件会自动优化图像,支持响应式图片和懒加载。
  • 懒加载:默认情况下,非视口内的图片不会立即加载,提高性能。
  • 优先加载:可以通过设置 priority 属性,优先加载关键图片。

总结

  1. 静态站点生成(SSG):使用 getStaticProps() 生成静态页面,适合不频繁变化的内容。
  2. 增量静态生成(ISR):结合 revalidate 属性,支持在构建后继续更新静态内容。
  3. Image 组件:使用 next/image 组件优化图片加载,提升页面性能。

这些功能结合使用,可以帮助你构建高效、快速的静态网站,提供优秀的用户体验。

评论区
评论列表
menu