面试题答案
一键面试SSR 和 SSG 的选择依据
- 业务需求
- 动态内容实时性要求高:若应用包含大量实时更新的数据,如社交媒体动态、在线游戏状态等,SSR 更为合适。因为 SSR 在每次请求时从服务器获取最新数据并渲染,能保证用户看到的是最新信息。
- 内容相对静态:对于博客、产品介绍页面等内容更新频率低的场景,SSG 是较好选择。它在构建时生成静态 HTML 文件,可大大提高页面加载速度。
- 个性化内容:如果需要根据用户身份、偏好等展示个性化内容,SSR 能基于用户请求动态生成页面。而 SSG 生成的静态页面难以满足高度个性化需求,除非进行大量定制。
- 性能目标
- 首屏加载速度:SSG 通常在首屏加载上表现出色,因为静态 HTML 文件可直接从 CDN 快速获取。对于内容变化少的页面,这能极大提升用户体验。但如果页面内容依赖大量实时数据,SSR 的动态渲染虽稍慢,但能保证数据实时性。
- SEO:两者都对 SEO 友好。SSG 生成的静态页面可直接被搜索引擎抓取,而 SSR 能确保搜索引擎获取完整渲染的页面内容,尤其是对于 JavaScript 渲染后才呈现的关键信息。
SSR 和 SSG 结合使用的策略
- 页面层面结合
- 首页与重要着陆页:对于首页或重要的营销页面,可采用 SSG 构建,以获得最快的首屏加载速度和良好的 SEO 基础。同时,在页面中涉及实时数据部分,如实时通知或广告位,通过 SSR 动态替换。
- 动态内容页面:如用户个人中心、订单详情等个性化且数据实时性高的页面,使用 SSR。而这些页面中一些不随用户状态改变的静态部分,如页面布局框架、帮助文档链接等,可在构建时通过 SSG 生成。
- 技术实现
- 构建工具配置:利用 Vue 生态中的工具,如 Nuxt.js 或 VitePress。在 Nuxt.js 中,可以通过设置
generate
配置项启用 SSG 功能,同时保留 SSR 能力。对于需要 SSG 的页面,可使用nuxt generate
命令生成静态文件。对于 SSR 部分,通过服务器端渲染逻辑处理动态请求。 - 数据获取与缓存:对于结合场景,合理管理数据获取。对于 SSG 生成的页面部分,可在构建时获取数据并缓存。对于 SSR 部分,在每次请求时按需获取最新数据。例如,使用 Redis 等缓存工具,对频繁请求的数据进行缓存,减少数据库压力,提高响应速度。
- 构建工具配置:利用 Vue 生态中的工具,如 Nuxt.js 或 VitePress。在 Nuxt.js 中,可以通过设置
- 交互响应优化
- 预渲染与注水:在 SSG 生成的页面加载后,通过 Vue 的“注水”(hydration)过程,将静态 HTML 转变为可交互的 Vue 应用。对于 SSR 渲染的页面,优化 JavaScript 代码加载和执行顺序,确保关键交互事件的绑定尽快完成,提高交互响应速度。
- 代码分割与懒加载:无论是 SSR 还是 SSG 部分,都采用代码分割技术,将 JavaScript 代码按需加载。对于非关键的组件或功能,使用懒加载,避免初始加载时过多的代码下载,提升整体性能。