【发布时间】:2021-06-27 19:04:52
【问题描述】:
我的问题是,我无法理解像 Next.js 这样的服务器端呈现单页应用程序框架如何在前端接收预呈现的完整 HTML,而无需重写整个页面。例如 nextjs 网站声明如下:
默认情况下,Next.js 会预渲染每个页面。这意味着 Next.js 会提前为每个页面生成 HTML,而不是全部由客户端 JavaScript 完成。预渲染可以带来更好的性能和 SEO。 每个生成的 HTML 都与该页面所需的最少 JavaScript 代码相关联。当浏览器加载页面时,其 JavaScript 代码将运行并使页面完全交互。 (这个过程称为水合作用。)
我了解这如何提高 SPA 在首页加载时的响应能力。但是在第一次加载之后,是什么让服务器端渲染与 SPA 兼容?我认为这是由于我无法理解的基本误解造成的,所以我有一些进一步的问题可能会帮助您理解它:
- SSR SPA 是否总是以完整的预呈现 HTML 响应,还是仅响应第一页加载?
- 如果前者为真,那么在后续响应中,客户端如何有效地仅呈现差异而不是重写整个页面?
- 否则,如果后者为真,那么 SSR SPA 后端如何判断它何时响应第一个请求,何时响应应该是整个 HTML,以及何时响应后续请求,当大部分页面已经存在时并且只需要发送一些相对最少的信息?
我对 SSR 与 SPA 兼容的原因有什么误解?
非常感谢所有解决这个问题的人!
【问题讨论】:
-
我认为我们没有任何名为
SSR SPAs的东西,单页应用程序自然呈现在客户端。尽管如此,我们可以混合使用客户端渲染和服务器端渲染。
标签: reactjs next.js single-page-application server-side-rendering