nextjs
静态生成
Next.js 的静态生成 (Static Generation, SG) 是一种构建方式,它在构建时预渲染页面 HTML,并将这些 HTML 文件直接提供给客户端。这意味着页面内容在用户请求之前就已经准备好了,从而提供更快的加载速度和更好的 SEO 性能。
工作原理:
在构建过程中,Next.js 会为每个静态生成的页面生成一个对应的 HTML 文件。当用户请求页面时,服务器直接返回预先构建好的 HTML 文件,无需在服务器端进行任何渲染。这与传统的服务器端渲染 (SSR) 不同,SSR 是在每次请求时动态生成 HTML。
使用场景:
静态生成适用于内容不经常变化的页面,例如:
- 博客文章
- 产品页面
- 文档
- 营销 landing page
优势:
- 更快的加载速度: 因为 HTML 已经在构建时生成,所以服务器可以立即响应请求,无需等待渲染。
- 更好的 SEO: 搜索引擎爬虫可以更容易地抓取预渲染的 HTML 内容,从而提高网站的 SEO 排名。
- 降低服务器负载: 由于页面是在构建时生成的,服务器无需处理每个请求的渲染,从而降低了服务器负载。
- 更好的缓存: 静态生成的 HTML 文件可以被 CDN 缓存,进一步提高加载速度。
如何使用:
在 Next.js 中,可以使用 getStaticProps
函数来实现静态生成。这个函数在构建时运行,并返回一个包含页面所需数据的对象。这些数据将被传递给页面的组件,用于渲染 HTML。
import Head from "next/head"; import Layout from "../../app/layout";
// pages/post-static/[id].js // 使用静态生成html例子打包后会生成多个html文件,每个文件对应一个id function Post({ post, id }: any) { return ( <Layout> <div> <Head> <title>{`${id}标题`}</title> <meta name="description" content={`Post${id}页面描述`} /> <meta name="keywords" content={`文章${id}的关键词`} /> <meta name="viewport" content="initial-scale=1.0, width=device-width" /> {/* 其他SEO相关的标签 */} </Head> <h1>{JSON.stringify(post.data)}</h1> </div> </Layout> ); }
// 获取静态页面数据(如果只有一个页面则不需要此函数) export async function getStaticProps({ params }: any) { const res = await fetch( `http://xxx/api/utils-updates/1?populate=*&id=${params.id}` ); const post = await res.json();
return { props: { post, id: params.id, }, }; }
// 这里是根据id动态生成html文件,可以根据接口返回的数据生成多个html文件 export async function getStaticPaths() { return { paths: [ { params: { id: "1" } }, { params: { id: "2" } }, { params: { id: "3" } }, ], fallback: false, // 或者 'blocking' 或 true }; }
export default Post;
|