面试题答案
一键面试1. 静态站点生成(Static Site Generation, SSG)
- 概念:在构建时生成 HTML 页面。这些页面是完全静态的,可以直接部署到任何静态文件服务器上。用户请求页面时,服务器直接返回预先生成的 HTML,无需实时渲染。
- 工作原理:Next.js 在构建阶段遍历所有需要生成静态页面的路由(通常通过
getStaticProps
函数指定)。对于每个路由,getStaticProps
函数会在构建时执行,获取数据并将其传递给页面组件,然后将页面渲染为 HTML。这些 HTML 文件及其相关资源(如 CSS、JavaScript)会被输出到out
目录中,用于部署。
2. 增量静态再生(Incremental Static Regeneration)
- 概念:允许在构建后更新静态页面。与传统静态站点生成不同,它可以在页面请求时重新生成页面,而不需要重新构建整个站点。
- 工作原理:通过
getStaticProps
函数中的revalidate
选项实现。当设置了revalidate
后,Next.js 会在一定时间间隔(以秒为单位,revalidate
的值)内重新验证页面数据。在这个时间间隔内,用户请求页面时,服务器会返回缓存的静态页面。当时间间隔结束后,下一次请求页面时,Next.js 会在后台重新执行getStaticProps
函数获取最新数据,重新生成页面,并返回给用户。如果重新生成过程中出现错误,仍会返回缓存的旧页面。
3. 电商产品展示页面场景下的选择与结合
- 商品信息更新频率低,页面性能要求极高:
- 策略:优先使用静态站点生成(SSG)。由于商品信息更新不频繁,在构建时生成静态页面可以提供最快的加载速度。可以通过
getStaticProps
函数在构建时获取商品数据,然后将其渲染为静态 HTML。例如,对于一些长期不变的商品描述、基本规格等信息,使用 SSG 可以有效减少服务器负载和用户等待时间。
- 策略:优先使用静态站点生成(SSG)。由于商品信息更新不频繁,在构建时生成静态页面可以提供最快的加载速度。可以通过
- 商品信息更新频率高,但仍希望保持较好的页面性能:
- 策略:采用增量静态再生(Incremental Static Regeneration)。通过在
getStaticProps
中设置revalidate
选项,根据商品信息的更新频率合理设置revalidate
的时间值。比如对于价格变动较频繁的商品,设置较短的revalidate
时间(如 60 秒),这样既能保证页面性能(大部分时间返回缓存的静态页面),又能及时更新商品信息。
- 策略:采用增量静态再生(Incremental Static Regeneration)。通过在
- 部分商品信息更新频率高,部分更新频率低:
- 策略:结合 SSG 和增量静态再生。对于更新频率低的商品信息部分(如商品品牌介绍、固定的产品特性等),使用 SSG 生成静态页面。对于更新频率高的部分(如实时库存、动态价格等),在页面组件中通过客户端数据获取(如使用
useSWR
等库)或者在getStaticProps
中结合revalidate
来处理。这样可以根据不同商品信息的特性,灵活选择技术,在保证页面性能的同时,满足业务的动态更新需求。
- 策略:结合 SSG 和增量静态再生。对于更新频率低的商品信息部分(如商品品牌介绍、固定的产品特性等),使用 SSG 生成静态页面。对于更新频率高的部分(如实时库存、动态价格等),在页面组件中通过客户端数据获取(如使用