MST

星途 面试题库

面试题:Next.js 中 getStaticProps 的使用场景及原理

请详细阐述在 Next.js 里 getStaticProps 适用于哪些场景,它是如何工作的,并且说明它在构建时和运行时分别起到什么作用。
35.3万 热度难度
前端开发Next.js

知识考点

AI 面试

面试题答案

一键面试

getStaticProps 适用场景

  1. 内容驱动型网站:例如博客、新闻网站等,这些网站的大部分页面内容相对稳定,更新频率较低。使用 getStaticProps 可以在构建时就获取并生成 HTML 页面,提高页面加载速度。
  2. 电子商务产品页面:产品信息在一段时间内不会频繁变动,通过 getStaticProps 在构建时获取产品数据并生成静态页面,能有效提升用户访问产品页面的性能。
  3. 国际化站点:对于多语言版本的页面,可在构建时根据不同语言获取相应的文本内容并生成静态页面,为不同地区用户提供快速加载体验。

工作原理

  1. 数据获取getStaticProps 是一个在服务器端运行的函数,它可以从各种数据源(如 CMS、数据库、API 等)获取数据。
  2. 页面预渲染:Next.js 在构建阶段会调用 getStaticProps 函数,将获取到的数据传递给页面组件作为 props。然后 Next.js 使用这些数据来预渲染页面,生成静态 HTML 文件。
  3. 缓存机制:生成的静态 HTML 文件会被缓存,当用户请求相应页面时,直接返回缓存的 HTML,无需再次执行数据获取逻辑。

在构建时的作用

  1. 数据获取与注入:在构建过程中,Next.js 遍历所有使用了 getStaticProps 的页面,并调用该函数。函数从数据源获取数据,并将数据作为 props 传递给对应的页面组件。例如,如果是一个博客页面,getStaticProps 可以从 CMS 获取文章内容,然后将文章数据传递给博客页面组件。
  2. 静态页面生成:基于获取的数据和页面组件,Next.js 预渲染页面,生成静态 HTML 文件。这些静态文件会被输出到 out 目录(默认),准备部署到服务器或 CDN。

在运行时的作用

  1. 快速页面加载:当用户请求页面时,服务器或 CDN 直接返回预渲染生成的静态 HTML 文件。由于无需在运行时执行数据获取逻辑,页面能够快速加载,提升用户体验。
  2. 缓存与复用:静态 HTML 文件被缓存,后续相同的请求可以直接从缓存中获取,减少服务器负载。即使数据源的数据发生变化,在没有重新构建应用的情况下,用户仍然会看到旧版本的静态页面。不过可以通过增量静态再生(Incremental Static Regeneration)来解决数据更新的问题,在运行时重新生成部分静态页面。