MST

星途 面试题库

面试题:Next.js的getServerSideProps与其他数据获取方法的深度对比及应用选择

将getServerSideProps与getStaticProps、Infinite Static Regeneration以及客户端数据获取方法(如useEffect中fetch)进行详细对比,从数据更新频率、SEO友好度、性能开销等多方面分析。并结合一个复杂电商项目场景,说明在不同页面(如商品列表页、商品详情页、用户个人中心页)应如何合理选择数据获取方法。
36.1万 热度难度
前端开发Next.js

知识考点

AI 面试

面试题答案

一键面试

1. getServerSideProps 与其他方法对比

1.1 数据更新频率

  • getServerSideProps:每次请求页面时都会重新获取数据,数据更新频率极高,始终获取最新数据。
  • getStaticProps:在构建时获取数据并生成静态页面,数据更新依赖重新构建或增量静态再生。
  • Infinite Static Regeneration:可以在构建后增量更新特定页面数据,更新频率基于设定的重新验证时间。
  • 客户端数据获取(useEffect 中 fetch):数据更新依赖用户操作(如页面刷新)或通过代码逻辑触发重新获取,手动控制更新频率。

1.2 SEO 友好度

  • getServerSideProps:有一定 SEO 友好度,因为数据是在服务器端获取并渲染,但相比静态生成,搜索引擎爬虫访问页面时可能需要等待数据获取,性能上稍逊。
  • getStaticProps:高度 SEO 友好,因为构建时生成静态 HTML,搜索引擎爬虫可直接访问完整内容。
  • Infinite Static Regeneration:SEO 友好度与 getStaticProps 类似,构建时生成静态页面,且能增量更新,保证内容相对新。
  • 客户端数据获取(useEffect 中 fetch):SEO 不友好,因为初始 HTML 没有数据,搜索引擎爬虫获取到的可能是空白或部分内容。

1.3 性能开销

  • getServerSideProps:每次请求都在服务器端执行获取数据逻辑,性能开销较大,尤其在高并发场景下。
  • getStaticProps:构建时开销较大,因为要获取所有页面数据并生成静态页面,但构建完成后,运行时性能开销小,直接提供静态文件。
  • Infinite Static Regeneration:构建时开销与 getStaticProps 类似,运行时若在重新验证时间内,开销小;重新验证时会有一定服务器开销。
  • 客户端数据获取(useEffect 中 fetch):客户端性能开销,不占用服务器资源,但首次加载页面时,用户可能看到空白页面等待数据获取。

2. 复杂电商项目场景下不同页面选择

2.1 商品列表页

  • 推荐方法:getStaticProps 结合 Infinite Static Regeneration。
  • 原因:商品列表相对稳定,大部分商品信息不会频繁变动。使用 getStaticProps 在构建时生成静态页面,可提高性能和 SEO。对于部分经常变动的数据(如热门商品排名),可通过 Infinite Static Regeneration 设置合理的重新验证时间,保持数据相对新。

2.2 商品详情页

  • 推荐方法:getStaticProps 结合 getServerSideProps。
  • 原因:商品基本信息(如名称、描述、图片等)可在构建时通过 getStaticProps 获取并生成静态页面,保证 SEO 和性能。但对于一些实时数据(如库存、价格变动),可在请求页面时使用 getServerSideProps 获取最新数据,确保用户看到准确信息。

2.3 用户个人中心页

  • 推荐方法:getServerSideProps 或客户端数据获取(useEffect 中 fetch)。
  • 原因:用户个人中心数据(如订单信息、积分等)通常高度个性化且实时性要求高。使用 getServerSideProps 可在服务器端获取最新用户数据,但会增加服务器负载。若用户操作频繁,也可考虑客户端数据获取,在页面加载后通过 useEffect 中 fetch 获取数据,减少服务器压力,同时满足用户实时看到最新数据需求。