首页 > 其他分享 >Angular 服务器端渲染应用 re-hydration 过程详解

Angular 服务器端渲染应用 re-hydration 过程详解

时间:2023-11-13 19:45:30浏览次数:25  
标签:浏览器 服务器端 渲染 re hydration 应用 Angular

当使用Angular启用服务器端渲染(Server-Side Rendering,以下简称SSR)时,应用程序的工作方式发生了显著变化。这使得Angular应用更加友好,不仅对搜索引擎爬虫更友好,还有助于改善应用的性能和加载时间。在本文中,我们将详细介绍在浏览器端访问启用SSR的Angular应用时背后发生的事情,特别侧重于"re-hydration"的过程。

什么是Angular的服务器端渲染(SSR)?

服务器端渲染是一种Web应用程序的渲染技术,它允许在服务器上预渲染应用的HTML,然后将其发送到浏览器。与传统的客户端渲染(Client-Side Rendering,CSR)相比,SSR具有许多优势,包括更好的搜索引擎优化(SEO)、更快的初始加载时间以及更好的性能。

在Angular中,SSR的主要目标是将Angular应用的渲染工作从浏览器转移到服务器,以便将初始HTML内容发送给浏览器,从而加速页面的首次加载。当用户访问启用SSR的Angular应用时,以下过程将发生:

1. 服务器端渲染

1.1 服务器端渲染开始于用户发出HTTP请求到Angular应用的服务器。
1.2 服务器收到请求后,创建一个Angular应用实例,执行应用的路由和组件渲染,并将初始HTML生成并发送到浏览器。这个HTML包含了初始页面状态,而不是一个空白的HTML模板。
1.3 在这个阶段,Angular应用在服务器上运行,而不是在浏览器中。

2. 初次加载

2.1 浏览器接收到服务器发送的预渲染的HTML响应。
2.2 浏览器开始解析HTML,并构建DOM树。
2.3 JavaScript文件和其他资源(CSS、图片等)开始下载。
2.4 与此同时,浏览器解析HTML中的JavaScript引导代码,这些代码初始化Angular应用。

3. Rehydration(重新水合)

re-hydration是SSR的一个关键概念,指的是在浏览器中重新激活(hydrate)已经在服务器上渲染的Angular应用。这一过程发生在初次加载时,它确保应用在浏览器中继续运行并具有互动性。

以下是re-hydration的详细过程:

3.1 JavaScript初始化:当浏览器解析到预渲染的HTML中的JavaScript引导代码时,Angular应用开始在浏览器中初始化。
3.2 应用状态:Angular应用不是从头开始构建,而是通过将服务器端渲染的HTML作为初始状态来继续构建。这包括应用的路由、组件状态和任何其他应用状态。
3.3 组件继续渲染:Angular应用会检测到浏览器已经渲染的部分,然后继续渲染其余部分。这包括组件模板中的任何延迟加载的内容。
3.4 事件绑定:事件监听器会重新附加到DOM元素上,以确保应用的互动性。这意味着用户可以与应用进行交互,如点击按钮或填写表单。
3.5 异步数据:如果应用需要通过HTTP请求获取数据,它会在浏览器端重新执行这些请求,并将响应数据插入到DOM中。
3.6 完成re-hydration:一旦应用的初始状态和交互性都恢复到浏览器端,re-hydration过程就完成了。此时,用户可以与应用进行交互,而且应用会继续在浏览器中运行。

4. 后续页面导航

一旦Angular应用在浏览器中进行了re-hydration,后续的页面导航将与传统的SPA应用相似,只是在每个页面导航之后,Angular应用会根据路由和组件的需求加载和渲染新内容。

re-hydration的重要性

re-hydration是SSR的核心概念之一,它确保了在服务器端渲染后,应用可以在浏览器中恢复并继续运行。这对于提供更快的初始加载时间和更好的用户体验至关重要。以下是一些re-hydration的重要性:

  1. 更快的初始加载时间: 由于初始HTML内容是由服务器渲染的,用户可以更快地看到页面内容。这比传统的CSR方法更快,因为在CSR中,用户需要等待浏览器下载JavaScript和渲染页面后才能看到内容。

  2. 搜索引擎优化(SEO): 搜索引擎爬虫可以轻松地获取服务器渲染的HTML内容,这有助于提高应用的SEO。在CSR中,搜索引擎可能无法有效地索引页面内容。

  3. 提高可访问性: re-hydration确保应用状态的恢复,包括焦点状态、表单字段等。这对于具有较高可访问性要求的应用非常重要。

  4. 更好的性能: re-hydration可以减轻浏览器的负担,因为大部分渲染工作已经在服务器上完成。这可以提高应用的性能和响应时间。

示例:re-hydration过程

为了更好地理解re-hydration的过程,让我们通过一个具体的示例来演示。假设我们有一个Angular应用,它是一个简单的博客网站,用户可以查看博客文章和发表评论。这个应用已经启用了SSR。

步骤1:服务器端渲染

当用户访问博客网站时,他们的浏览器发出HTTP请求到应用的服务器。服务器接收到请求后,开始服务器端渲染:

  • 服务器创建一个Angular应用实例。
  • 应用检测到路由,例如/blog/123,并渲染相关博客文章和评论的组件。
  • 应用生成初始的HTML,包括文章内容和评论,以及JavaScript引导代码。
  • 服务器将HTML响应发送回浏览器。

步骤2:初次加载

浏览器接收到服务器的响应,然后开始初次加载过程:

  • 浏览器解析HTML并构建DOM树。
  • JavaScript文件和其他资源(例如CSS和图片)开始下载。
  • 浏览器执行HTML中的JavaScript引导代码,这初始化了Angular应用。

步骤3:re-hydration

re-hydrationrehydration的过程,确保应用在浏览器中继续运行:

  • JavaScript初始化:浏览器执行预渲染HTML中的JavaScript引导代码,初始化Angular应用。
  • 应用状态:Angular应用开始在浏览器中构建,但它不是从头开始构建。相反,它继续使用服务器端渲染的HTML作为初始状态。这包括在博客文章组件中显示的文章内容和评论。
  • 组件继续渲染:Angular应用检测到浏览器已经渲染的部分,然后继续渲染其余部分。这可能包括加载评论的组件,以及可能是延迟加载的其他内容。
  • 事件绑定:事件监听器重新附加到DOM元素上,以确保应用的互动性。例如,如果用户可以点击“提交评论”按钮,这个按钮的点击事件将再次绑定,以确保评论功能正常工作。
  • 异步数据:如果应用需要通过HTTP请求获取数据,例如新评论或其他博客文章,它会在浏览器端重新执行这些请求,并将响应数据插入到DOM中。
  • 完成re-hydration:一旦应用状态和交互性都在浏览器中重新建立,re-hydration过程就完成了。此时,用户可以与应用进行交互,并且应用会在浏览器中继续运行。

步骤4:后续页面导航

一旦re-hydration完成,用户可以浏览博客网站的不同部分。在每次页面导航时,Angular应用将根据路由和组件的需求加载和渲染新内容,而不需要重新进行完整的re-hydration过程。

总结

Angular的服务器端渲染(SSR)是一种强大的技术,可以显著改善Web应用程序的性能、可访问性和搜索引擎优化。re-hydration是SSR的核心概念之一,它确保应用在浏览器中继续运行,并具有互动性。这个过程非常重要,因为它帮助提供更快的初始加载时间和更好的用户体验。通过将渲染工作从浏览器转移到服务器,Angular SSR可以在多个方面带来显著的好处,让用户更快地访问您的应用,并帮助提高您的应用在搜索引擎中的可见性。

标签:浏览器,服务器端,渲染,re,hydration,应用,Angular
From: https://www.cnblogs.com/sap-jerry/p/17829962.html

相关文章

  • 什么是 Angular 应用的 re-hydration 过程
    在讨论Angular的服务器端渲染(Server-SideRendering,简称SSR)以及重水合(Re-hydration)的过程之前,我们首先需要理解一些基本概念。Angular是一个流行的前端JavaScript框架,能够用于开发单页应用(SPA)。SPA在浏览器中加载一次,之后所有的用户交互都通过JavaScript来处理,这样能提......
  • 使用.NET Core创建Windows服务
    使用.NETCore创建Windows服务1.创建一个新的WorkerService项目打开命令行工具(例如:PowerShell、CMD、或者终端),然后输入以下命令创建一个新的WorkerService项目:dotnet new worker -n MyWorkerService这个命令将会创建一个名为"MyWorkerService"的新项目。2.添加必要的NuGe......
  • [题解] CFgym101623F Factor-Free Tree
    Factor-FreeTree当一棵二叉树中的每个节点的权值都与它所有祖先的权值互质时,我们称它为factor-freetree。给你一棵按照中序遍历的顺序的权值序列\(a\),求这个序列是否对应这一棵factor-freetree。如果是就输出每个节点的父亲。\(n\le10^5,a_i\le10^7\)。考虑怎么......
  • SpringBoot+Redis整合
    SpringBoot+Redis整合一.操作Json1.1pom文件<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.7.1......
  • Fast-Reid的一个小小创新,能够解决行人重识别
    竞赛简介多年来,技术已经彻底改变了我们的世界,改变了我们每天的生活,一切都可以通过轻松地点击实现连接和访问。oneAPI就是这样一个技术堆栈,它在构建许多创新解决方案方面具有巨大的潜力。通过这次比赛精心策划的问题,您既可以更多地了解和体验人工智能技术在特定领域的运用,包括在机......
  • JavaSE DataStructure
    JavaSEDataStructureListArrayListArrayListDemo1点击查看代码importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;classArrayListDemo1{publicstaticvoidmain(String[]args){Collection<String>list=newA......
  • VMware Workstation 17.5 Pro Unlocker & OEM BIOS for Windows
    VMwareWorkstation17.5ProUnlocker&OEMBIOSforWindows在Windows上运行macOSSonoma请访问原文链接:https://sysin.org/blog/vmware-workstation-17-unlocker/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org桌面HypervisorVMwareWorkstationProVMwar......
  • RLHF · PBRL | 发现部分 D4RL tasks 不适合做 offline reward learning 的 benchmark
    论文题目:BenchmarksandAlgorithmsforOfflinePreference-BasedRewardLearning,TMLR20230103发表。openreview:https://openreview.net/forum?id=TGuXXlbKsnpdf版本:https://arxiv.org/pdf/2301.01392.pdfhtml版本:https://ar5iv.labs.arxiv.org/html/2301.01392目......
  • IDEA中github的remote不见了怎么办?
    情况是:本来已经和github建立连接了,并且也上传了一些数据。然后我有在其他文件加拉了一下分支代码,结果该文件夹下的和remote的仓库记录消失了。 记录一下。......
  • Wireshark抓包基础教程
    Wireshark抓包基础教程[TOC]OSI七层模型OSI七层模型层级层含义常用协议1物理层第一层中有很多技术——从物理网络设备、布线到电缆如何连接到设备之间的一切。另外,如果我们不需要电缆,那么信号的类型和传输方式是什么(例如,无线宽带)包括:节点(设备)和网络硬件、设备接口......