在 Next.js 中,静态站点生成(SSG)和增量静态生成(ISR)是构建高性能静态网站的重要功能。以下是这两个概念的详细介绍,以及如何优化图片加载。
静态站点生成是在构建时生成 HTML 文件,适合不经常变动的内容。
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,
},
};
}
getStaticProps()
,获取数据并生成静态 HTML。增量静态生成允许你在页面构建后继续更新静态内容,结合 revalidate
属性实现。
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 秒重新生成一次页面
};
}
Next.js 提供的 Image
组件有助于优化图片加载,支持自动调整大小、懒加载和更高效的格式。
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>
);
}
Image
组件会自动优化图像,支持响应式图片和懒加载。priority
属性,优先加载关键图片。getStaticProps()
生成静态页面,适合不频繁变化的内容。revalidate
属性,支持在构建后继续更新静态内容。next/image
组件优化图片加载,提升页面性能。这些功能结合使用,可以帮助你构建高效、快速的静态网站,提供优秀的用户体验。