前端的渲染方案主要有:
Client Side Rendering 是指直接在浏览器中使用 JavaScript 渲染页面。所有的逻辑、数据请求、模板和路由都由浏览器而不是服务器去处理。
重要的 script 和数据可以使用 <link rel=preload> 来更早地被请求,这样可以让解析器(parser)更早地执行这段 script。
见: https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/preload

缺点:
SSR 是指服务端渲染好整份 HTML,然后将该 HTML 和需要的 Javascript 作为导航的响应交给浏览器渲染并让页面可响应。这避免了额外的往返时间损耗(数据请求、模板请求等)。
客户端需要执行 Javascript 用于挂载 DOM 事件,从而可以响应用户事件,这个过程叫做 (re)hydration。


优点:
缺点:
Server Side Rendering 不是一个银弹。它的动态性会带来非常大的计算量。正确地使用 SSR 涉及到 component caching、memory consumption 和 memorization 等技巧
Static Side Generation 发生在构建时间,它可以提供一个非常快的 First Paint,First Contentful Paint 和 Time to Interative(假设客户端的 JS 是有限的)。
这里和 SSR 不同的是,这里的 Time to First Byte 也是非常快的,因为它不需要渲染 HTML,HTML 在构建时就已经确定了。 一般来说,SSG 会为每一个 url 都提前生成 HTML,因此这些静态资源可以部署到多个 CND 上,从而进行 edge-caching。

The time that the user sees non-interactive UI on the screen is also refered to as the uncanny valley: although users may think that they can interact with the website, there are no handlers attached to the components yet. This can be a frustrating experience for the user, as the UI may look like it's frozen!
从服务端发送来的 DOM 组件被完全 hydrated 需要花一定的时间。在组件完全被 hydrated 之前,JS 文件可以被加载、处理和执行,而不是一次性 hydrate 整个 application,即我们可以渐进式 hydrate 这些 DOM 结点。
通过这样,我们可以减少让页面具有响应的 JS 数量,同时可以只 hydrate 用户需要的结点。