加入收藏 | 设为首页 | 会员中心 | 我要投稿 宜春站长网 (https://www.0795zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

第三季度全球服务器收入增长2.2% 中国增速最快

发布时间:2021-02-02 16:14:47 所属栏目:传媒 来源:互联网
导读:写在前面 React 生态中,SSR 支持做得最好的可能是 Next.js,但 SSR 并不是Next.js的全部,只是其提供的预渲染支持之一: SSG(Static Site Generation/Static Generation):静态生成,在编译时生成静态 HTML SSR(Server-Side Rendering):服务端渲染,用户请

写在前面

React 生态中,SSR 支持做得最好的可能是 Next.js,但 SSR 并不是Next.js的全部,只是其提供的预渲染支持之一:

  • SSG(Static Site Generation/Static Generation):静态生成,在编译时生成静态 HTML
  • SSR(Server-Side Rendering):服务端渲染,用户请求到来时动态生成 HTML

通过各种方式在 CSR 开始之前预先渲染出页面内容,从而加快首屏性能,同时满足 SEO 的需要,这正是 Next.js 最核心的特性

不仅如此,Next.js 还提供了混用支持,能够将不同渲染模式结合使用,融合互补,例如:

  • ISR(Incremental Static Regeneration):增量静态再生成,运行时定期重新生成静态 HTML
  • SSG 降级 SSR:未命中预先生成的静态 HTML 时,立即进行 SSR
  • SSR 带静态缓存:SSR 完成之后,将结果缓存起来,下次命中静态缓存直接返回(相当于 SSG)
  • SSG 结合 CSR:编译时生成静态部分(页面外框),CSR 填充动态部分(页面内容)
  • SSR 联动 CSR:URL 直接访问走更快的 SSR,SPA 跳转过来走体验更优的 CSR

这些细腻的混合渲染支持让各种渲染模式得以充分发挥其优势,也让 Next.js 增色不少

SSG + SSR

SSG 相当于把 SSR 的渲染过程前移到了编译时,从而优化掉这部分耗时,达到极佳的页面加载性能。但也存在明显的缺陷——只能用来渲染静态内容,使得一个原本很厉害的方案很难有用武之地。那么,有没有办法扩大其适用场景?

有。关键在于如何理解“静态”,静态、动态实际上描述的是内容的变化频率,几乎(永远)不会变,或者变化频率很低的内容,我们称之为静态内容。所以只要想办法应对内容变化,就有可能把 SSG 的适用场景从经常不变的“静态内容”扩大到不经常变的“动态内容”

极限情况下,“不经常变”等价于“不是每一次都变”,也就是说,除了实时/个性化等每时每刻都动态变化的内容,其余场景都可以用 SSG,当然,前提是要保障内容能够按需要的频率更新生效。内容更新其实就是重新 SSG,所以只缺一个更新时机……

另一个不那么显而易见的限制是静态内容的数量,因为渲染工作要在编译时全部完成,如果静态数据有 100 万条,就要编译生成 100 万份 HTML,编一次可能需要好几天……编译成本(无论时间/机器)会随内容数量不断增加,这是 SSG 渲染模式与生俱来的问题,看起来是无解的。除非,编译时不生成全量页面……

而面向用户请求的 SSR 恰好能够提供合适的更新时机,同时作为编译的下游,SSR 有机会拦住漏网之鱼。于是,SSG 与 SSR 一拍即合,SSG 只编译生成小部分热点页面,其余的在运行时通过 SSR 生成。用户请求到来时,根据内容是否需要更新来决定该走 SSR 重新生成还是沿用上次生成的产物:

Instead, you may statically generate a small subset of pages and use fallback: true for the rest. When someone requests a page that’s not generated yet, the user will see the page with a loading indicator. Shortly after, getStaticProps finishes and the page will be rendered with the requested data. From now on, everyone who requests the same page will get the statically pre-rendered page.

Inspired by stale-while-revalidate, background regeneration ensures traffic is served uninterruptedly, always from static storage, and the newly built page is pushed only after it’s done generating.

如此这般,SSG 扩大了适用场景(高频变化的内容、编不完的海量内容),SSR 获得了性能优势(静态缓存):

This ensures that users always have a fast experience while preserving fast builds and the benefits of Static Generation.

P.S.关于 SSG 与 SSR 结合的更多信息,见When is fallback: true useful?、Incremental Static Regeneration

(编辑:宜春站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读