前端/移动开发面试题更新 2026-08-05

在构建 Next.js 应用时,你会采取哪些手段来区分哪些页面应该被静态生成,哪些页面应该采用服务端渲染?请结合具体方法说明。

前端/移动开发技术原理技术选型方案权衡Next.js

考察说明

考察对 Next.js 页面渲染模式选择与实现机制的理解。

回答思路

  1. 【回答框架 1】Next.js 的页面渲染模式由页面组件中导出的函数决定。默认情况下,pages 目录下的组件会进行客户端渲染(CSR),但通过导出 getStaticProps 或 getServerSideProps 可以将页面切换为静态生成(SSG)或服务端渲染(SSR)。
  2. 【回答框架 2】对于静态生成,页面在构建时(build time)预渲染为 HTML,并通过 getStaticProps 获取数据。若包含动态路由,使用 getStaticPaths 指定要生成的路径,并可结合 fallback 选项控制未生成路径的访问行为。静态页面可被缓存,响应速度快,适合内容变化不频繁的页面。
  3. 【回答框架 3】对于服务端渲染,页面在每次请求时执行 getServerSideProps,服务端获取数据后渲染返回。这适合需要实时数据或依赖用户会话的页面,但会增加服务器负载和响应延迟,不适合高并发场景。
  4. 【回答框架 4】此外,还可以使用增量静态再生成(ISR),在 getStaticProps 中设置 revalidate 时间,使静态页面在后台定期更新,兼顾静态页面的性能和内容的时效性。
  5. 【回答框架 5】总结选择逻辑:页面内容是否公开且变化频率低,优先静态生成;需要个性化或实时数据则服务端渲染;两者之间可用 ISR 折中。
  6. 【关键点 1】使用 getStaticProps 与 getStaticPaths 实现 SSG,构建时预渲染。
  7. 【关键点 2】使用 getServerSideProps 实现 SSR,请求时渲染。
  8. 【关键点 3】ISR 通过 revalidate 字段提供静态页面的定期更新。
  9. 【易错点 1】不要在所有页面都使用 SSR,会带来性能问题。
  10. 【易错点 2】getStaticProps 中不能访问请求上下文(如 req/res),因其在构建时执行。
  11. 【易错点 3】fallback: true 或 'blocking' 的行为需要根据 SEO 和加载体验取舍。