面试题答案
一键面试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 获取数据,减少服务器压力,同时满足用户实时看到最新数据需求。