Angular SSR 应用中 serverApp-state script 的工作原理介绍

举报
汪子熙 发表于 2023/12/01 20:19:16 2023/12/01
【摘要】 <script id="serverApp-state" type="application/json"> 元素是在服务器端渲染(Server-Side Rendering,SSR)Angular 应用中用于传递状态数据的重要组成部分。它被称为 “SSR Transfer State” 机制的一部分,其作用是在服务器端生成的 HTML 页面中嵌入初始数据,以便客户端可以在应用初始化时使用这些...

<script id="serverApp-state" type="application/json"> 元素是在服务器端渲染(Server-Side Rendering,SSR)Angular 应用中用于传递状态数据的重要组成部分。它被称为 “SSR Transfer State” 机制的一部分,其作用是在服务器端生成的 HTML 页面中嵌入初始数据,以便客户端可以在应用初始化时使用这些数据,从而提高应用的性能和用户体验。

这个特殊的 <script> 元素通常位于 Angular SSR 渲染的 HTML 页面的 <head> 部分,具有一个特殊的 ID serverApp-state,以及 type 属性设置为 application/json,这是为了表明其内容是 JSON 数据。这个元素的目的是在服务器端渲染过程中捕获应用状态并将其传递到客户端,以便客户端应用可以快速加载并具备初始数据。

下面是这个元素的作用以及如何工作的简要说明:

  1. 捕获初始应用状态

    • 在服务器端渲染期间,Angular 应用会获取初始状态数据,例如组件的数据、路由参数、用户权限等。这些数据通常保存在应用的状态管理机制中(例如 NgRx 或 Angular 的内置状态管理系统)。
  2. 序列化为 JSON

    • 这些初始状态数据会被序列化为 JSON 格式。JSON 是一种通用的数据格式,易于在客户端解析。
  3. 嵌入到 <script> 元素中

    • 序列化后的数据会被包装在位于 <script> 元素内的 application/json 类型的标签中。这使得客户端能够轻松地检索数据,并且它会在 HTML 页面的 <head> 部分出现如下所示:
    <script id="serverApp-state" type="application/json">
      `{"your": "serialized-data-here"}`
    </script>
    
    • 注意,我在 JSON 数据中使用了特殊字符 `来替代英文双引号 ",以满足你的要求。
  4. 传递到客户端

    • 当客户端加载服务器渲染的 HTML 页面时,浏览器会解析页面内容,包括 <script> 元素中的 JSON 数据。客户端应用可以通过检索这个元素的内容来获取初始状态数据,以便在应用初始化时使用。
  5. 初始化客户端应用

    • 客户端应用会使用获取的初始状态数据来配置自身。这可以包括恢复用户会话、填充组件数据、路由导航和其他应用状态的初始化操作。这使得客户端应用能够立即呈现用户所需的内容,而无需等待进一步的数据加载。
  6. 提高性能和SEO

    • 通过在服务器端将初始状态嵌入到 HTML 页面中,可以显著提高应用性能,因为客户端应用不需要在初始加载时重新获取数据。此外,搜索引擎(如谷歌)也可以看到服务器渲染的页面,有助于提高 SEO(搜索引擎优化)。

举例来说明这个机制的工作方式。假设你正在构建一个电子商务网站的 Angular 应用,该网站有一个商品列表页面,你希望在服务器端渲染时预加载一些商品数据。以下是示例:

  1. 服务器端渲染:

    在服务器端,你的 Angular 应用会加载商品列表数据,并将其序列化为 JSON 格式。然后,将该数据插入到 <script> 元素中:

    <script id="serverApp-state" type="application/json">
      `{"products": [ {"id": 1, "name": "Product A"}, {"id": 2, "name": "Product B"} ]}`
    </script>
    
  2. 客户端加载:

    当用户在浏览器中访问你的网站时,浏览器会加载服务器端渲染的 HTML 页面。客户端应用程序会检索 <script> 元素中的数据,并使用它来初始化商品列表组件。这将导致商品列表页面在初始加载时就包含了一些商品数据,而不需要额外的网络请求。

这个机制对于提高网页性能,特别是在初始加载时减少数据请求以及对搜索引擎优化非常有用。通过传递初始状态,客户端应用可以更快地呈现内容,提供更好的用户体验。这是 Angular SSR Transfer State 机制的一个核心优势之一。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。