当前位置: 首页 > news >正文

性能优化之SSR、SSG

一、SSR和SSG介绍

        SSR(Server-Side Rendering,服务端渲染)和 SSG(Static Site Generation,静态站点生成)是现代前端框架(如 Next.js、Nuxt.js、Gatsby)的核心渲染策略,用于解决传统 CSR(客户端渲染)的 SEO 弱、首屏慢等问题。以下是关键对比与使用指南:


1、两者核心差异

特性SSR (服务端渲染)SSG (静态站点生成)
渲染时机每次请求时实时渲染构建时预渲染所有页面
数据实时性高(请求时获取最新数据)低(构建后数据即固定)
适用场景用户仪表盘、实时数据页博客、文档、营销页
服务器压力高(需处理每次渲染)极低(直接托管静态文件)
部署复杂度需 Node.js 服务器可托管至 CDN(如 Netlify/Vercel)
典型框架Next.js (getServerSideProps)Next.js (getStaticProps)、Gatsby

2、工作流程对比

 SSR 流程

SSG 流程

 

3、两者如何选择?

选 SSR 当:

  • 页面内容每次请求都变化(如用户个人中心)

  • 需要实时数据(股票行情、聊天消息)

  • 对 SEO 要求高且内容动态(电商商品详情页)

选 SSG 当:

  • 内容长期不变(技术文档、博客文章)

  • 追求极限加载速度(通过 CDN 全球分发)

  • 降低服务器成本(无服务器端计算)

 4、混合场景:动态静态化

现在的框架支持混合渲染模式,例如:

  • ISR (Incremental Static Regeneration,增量静态再生)
    (ISR 是由 Next.js 框架提出的核心功能,用于扩展 SSG(静态站点生成)的能力,实现动态内容与静态性能的平衡)
// 以Next.js 示例:每60秒重新生成页面
export async function getStaticProps() {const res = await fetch('https://api.example.com/data');return { props: { data: res.json() },revalidate: 60 // 秒};
}

👆🏻上面的代码 意思是:

首次访问 → 返回静态页面

60秒内新请求 → 立即返回旧静态页面(后台触发重新生成)

60秒后访问 → 返回新生成的页面

  • 按需生成 (On-demand Revalidation)
// 手动触发页面更新(如 CMS 内容变更时)
await res.revalidate('/path-to-update');

5、经典问题解决方案

问题SSR 方案SSG 方案
动态数据更新每次请求实时渲染ISR + 按需重新生成
百万级页面生成不适用惰性生成(仅生成被访问的页面)
用户登录状态处理在 getServerSideProps 读取 Cookie客户端渲染动态部分(如 useEffect
兼容旧版浏览器输出完整 HTML 无需客户端 JS同 SSR(预渲染 HTML 可降级使用)

6、性能优化技巧

  • SSR 优化

    • 使用流式渲染(React 18+ renderToPipeableStream

    • 缓存渲染结果(Varnish/Redis 缓存匿名用户页面)

  • SSG 优化

    • 代码分割(动态加载非关键组件)

    • 图片优化(自动转换为 WebP 格式)

    • 预取数据(<link rel="preload"> 关键接口)

7、框架推荐

  • React 生态:Next.js(SSR/SSG 最成熟)

  • Vue 生态:Nuxt.js(支持 nuxt generate 静态化)

  • 轻量化 SSG:Astro(按需激活交互,默认输出静态 HTML)

  • 内容驱动:Gatsby(GraphQL 数据层 + 强大插件库)

💡 技术决策口诀

  • 数据 → SSR

  • 数据 → SSG

  • 部分变/部分稳 → 混合渲染(ISR + SSR)


 

ps:知识学习记录,如有不严谨之处,欢迎交流! 

相关文章:

  • K8S认证|CKS题库+答案| 2. Pod 指定 ServiceAccount
  • 基于SpringBoot和PostGIS的OSM时空路网数据入库实践
  • 从 ClickHouse、Druid、Kylin 到 Doris:网易云音乐 PB 级实时分析平台降本增效
  • Tensorborad
  • clickhouse常用语句汇总——持续更新中
  • 【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
  • HarmonyOS-ArkUI 自定义弹窗
  • echarts在uniapp中使用安卓真机运行时无法显示的问题
  • 第七十四篇 高并发场景下的Java并发容器:用生活案例讲透技术原理
  • 机器学习监督学习实战四:九种回归算法对波士顿房价数据进行回归预测和评估方法可视化
  • 如何轻松将视频从安卓设备传输到电脑?
  • 【机器学习】主成分分析 (PCA)
  • 视频汇聚平台EasyCVR“明厨亮灶”方案筑牢旅游景区餐饮安全品质防线
  • 新成果:GaN基VCSEL动态物理模型开发
  • Java Lambda表达式深度解析:从入门到实战
  • AIGC-SD9、知识点
  • 老年生活照护实训室建设规划:照护质量评估与持续改进实训体系
  • Flask-Babel 使用示例
  • ECB(电子密码本,Electronic Codebook) 和 CBC(密码分组链接,Cipher Block Chaining)区分于用途
  • 操作系统中的设备管理,Linux下的I/O
  • 个人兼职做建设网站/百度推广销售员好做吗
  • jsp网站源码 怎么用/白山网络推广
  • 站酷app/网站排名优化外包
  • 申请域名建立网站/平台推广费用一般是多少
  • 家乡网络推广方案/宁波seo网站
  • 白狐网站建设/一般的电脑培训班要多少钱