javascript - 在 NuxtJS 中初始加载后,SSR 是如何工作的?
问题描述
在纯 VueJS 应用程序中,我们有一个<div id="app"></div>
容器,VueJS 将所有需要渲染的东西放在其中。
因此,如果我们在浏览器中打开源代码,我们将看不到任何呈现的内容。
因此,如果我们使用 SSR 的 Nuxt 功能,在第一次初始加载时,所有组件都会在服务器上呈现,我们会看到一些 HTML 内容。
但是,当我们浏览网站时会发生什么,当它在“水疗模式”下工作时(使用<nuxt-link>
)。当我点击一个链接时,该网站没有完全重新加载。我在 chrome 开发工具中看不到任何请求,非 XHR 非其他。即使我们从后端获得了完全渲染的内容,它也会通过 javascript 插入,<div id="app"></div>"
以防万一,因为我们不会重新加载页面。
但是我可以在源代码中看到一切都按照 SEO 的需要工作:导航到其他一些路线后,所有的 html 都存在于源代码中。但这是怎么发生的?
解决方案
该过程称为水合。
请注意,在 SPA 模式下,一切都会在客户端上呈现。使用 SSR 时,第一次渲染发生在服务器上,因此您可以在源代码中看到 HTML。
一旦在客户端,VueJS 将“水合”它的状态,这意味着它将应用程序的状态设置为来自服务器的状态。如果您随后使用<nuxt-link>
它将在 SPA 模式下导航。另一方面,使用法线<a>
不会。
这适用于所有用例,因为 Google 和其他搜索引擎没有启用 Javascript,它们只会对您的所有链接发出全新的请求,但您的用户会有 SPA 页面的感觉。
推荐阅读
- css-modules - 如何仅在另一个组件内覆盖某些样式
- android - Android Retrofit:response.errorBody 不为 null 但 response.errorBody.string() 返回 null
- docker - 在 Mac 上访问 Docker 容器中的原始磁盘设备
- kotlin - 如何为 Kotlin 数据类中的属性设置 OpenAPI 类型/模式
- typescript - 在 Typescript 中,为什么针对文字值的相等性测试不会缩小任何类型?
- tensorflow - 缺少 Keras 应用程序 MobileNetV2 的边界框?
- swiftui - 如何在 TabView SwiftUI 中保存视图的列表状态
- python - Python中的二维曲面极坐标图问题
- c# - 触发 Masstransit 消费者时启动新的 LifetimeScope
- r - 下标和换行