首页 > 其他分享 >如何删除 Angular SSR 应用 State Transfer 嵌入到 HTML 里的某些字段

如何删除 Angular SSR 应用 State Transfer 嵌入到 HTML 里的某些字段

时间:2023-11-19 19:44:37浏览次数:22  
标签:HTTP 服务器端 TransferHttpCacheModule Transfer SSR State import 客户端 请求

笔者这篇文章介绍了 Angular SSR 应用 State Transfer 的工作机制和错误排查方法。

SSR 服务器端发送给客户端 response 里包含的 State Transfer 数据的一个例子如下:

<script id="serverApp-state" type="application/json">
...
&q;headers&q;:{&q;date&q;:[&q;Fri, 05 Mar 2021 12:44:26 GMT&q;],&q;content-type&q;:[&q;application/json; charset=utf-8&q;],&q;content-length&q;:[&q;2933&q;],&q;connection&q;:[&q;keep-alive&q;],&q;server&q;:[&q;nginx/1.18.0&q;],&q;vary&q;:[&q;origin,accept-encoding&q;],&q;cache-control&q;:[&q;no-cache&q;],&q;accept-ranges&q;:[&q;bytes&q;]}
...
</script>

如果我们的需求是在这个 response 里删除部分字段,可以参考这篇文章的做法。

TransferHttpCacheModule 是 Angular Universal 的一部分,它在服务器端渲染(SSR)环境中非常有用。这个模块的主要目的是优化页面的加载时间,特别是在首次加载页面时。

在没有使用 TransferHttpCacheModule 的情况下,当应用在服务器端渲染后发送给客户端时,客户端会再次执行相同的 HTTP 请求以获取数据。这意味着同一份数据会被请求两次,一次在服务器端,一次在客户端。这将导致不必要的网络请求,从而影响页面的加载时间和用户体验。

这就是 TransferHttpCacheModule 的作用之处。通过使用这个模块,当应用在服务器端渲染时执行的 HTTP 请求的响应数据将被缓存,并随着渲染后的页面一起发送给客户端。然后,客户端应用在执行相同的 HTTP 请求时,会先检查是否有缓存的响应数据,如果有,它将直接使用这些数据,而不是向服务器发送另一个请求。

这样做的好处是显而易见的:减少了不必要的网络请求,加快了页面的加载速度,改善了用户体验。

下面是一个简单的示例来说明如何使用 TransferHttpCacheModule

首先,你需要在服务器端的 AppModule 中导入 TransferHttpCacheModule。这通常在 app.server.module.ts 文件中完成:

import { NgModule } from '@angular/core';
import { ServerModule, ServerTransferStateModule } from '@angular/platform-server';
import { AppModule } from './app.module';
import { AppComponent } from './app.component';
import { TransferHttpCacheModule } from '@nguniversal/common';

@NgModule({
  imports: [
    AppModule,
    ServerModule,
    ServerTransferStateModule,
    TransferHttpCacheModule
  ],
  bootstrap: [AppComponent],
})
export class AppServerModule {}

在这个例子中,我们同时导入了 ServerModuleServerTransferStateModule,这些都是在服务器端渲染应用时需要的模块。我们也导入了 TransferHttpCacheModule,这是我们用来缓存 HTTP 请求响应的模块。

然后,在你的服务中,你可以像平常一样进行 HTTP 请求:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class DataService {
  constructor(private http: HttpClient) {}

  getData() {
    return this.http.get('https://example.com/api/data');
  }
}

在这个服务中,我们使用 HttpClient 来获取数据。当这个服务在服务器端运行时,由于我们已经在服务器端的 AppModule 中导入了 TransferHttpCacheModule,所以这个请求的响应数据将被自动缓存。

标签:HTTP,服务器端,TransferHttpCacheModule,Transfer,SSR,State,import,客户端,请求
From: https://www.cnblogs.com/sap-jerry/p/17842465.html

相关文章

  • Transferability of the Chinese Eco-environmental Protection Measure
        MostofSaudiArabiaisdesert,soitfacesseriousproblemsofwatershortageanddesertification.Chinahasemployedtechnologicalmethodsandhastakengreendevelopmentapproachestocombatdesertification.Thecountryisutilizingsolarpower......
  • 基于 Angular Universal 引擎进行服务器端渲染的前端应用 State Transfer 故障排查案
    笔者之前这篇掘金文章一个SAP开发工程师的2022年终总结:四十不惑提到,我目前的团队,负责开发一款基于Angular框架的电商Storefront应用。这个Storefront是一个开源的、基于Angular和Bootstrap并为SAPCommerceCloud构建的Angular应用程序。图1:SpartacusStore......
  • 梯度消失和梯度爆炸——从本质上说残差、LSTM遗忘门(依赖cell state)解决思路都是一样的
    在深度学习中,梯度消失和梯度爆炸是两个常见的问题。梯度消失是指在进行反向传播时,梯度会随着层数的增加而指数级地减小,直到几乎消失,导致深层的神经网络参数无法有效更新。这主要是因为使用了像sigmoid和tanh这样的激活函数,它们在输入值较大或较小的情况下,梯度值接近于0。    梯......
  • 关于 Angular SSR 应用 index.html 中的 serverApp-state script 元素
    首先,我们需要了解AngularSSR(Server-SideRendering)以及SSRTransferState。AngularSSR是Angular应用程序的服务端渲染技术,它允许Angular应用程序在服务器上渲染其组件,并生成静态HTML页面,再发送给客户端。这种方法可以提高首次加载速度,提升SEO效果。而SSRTransfe......
  • HTTP 响应字段 Transfer-Encoding 赋值成 chunked 的作用介绍
    Transfer-Encoding:chunked是HTTP/1.1协议中定义的一种数据传输方式。在HTTP/1.1之前,HTTP协议的响应数据通常是一次性发送的,也就是说,服务器必须把所有的响应数据准备好后,一次性发送给客户端。这种方式的缺点是,如果响应数据很大,或者数据的产生需要花费一定的时间,那么服务器......
  • Angular SSR 应用中 serverApp-state script 的工作原理介绍
    <scriptid="serverApp-state"type="application/json">元素是在服务器端渲染(Server-SideRendering,SSR)Angular应用中用于传递状态数据的重要组成部分。它被称为"SSRTransferState"机制的一部分,其作用是在服务器端生成的HTML页面中嵌入初始数据,以便客户端可以在应用初始......
  • Vue3 Pinia对state的订阅监听($subscribe,$onAction)数据监听
    <template><divclass="main-container":class="{'show-scroll':targetIsVisible}"><div:style="{height:frameHeight+'px'}"class="main-content":class="{'show-......
  • HTTP 响应字段 Transfer-Encoding 的作用介绍
    Transfer-Encoding字段是HTTP响应头部的一部分,用于指示在传输响应正文(responsebody)时所使用的传输编码方式。在HTTP通信中,响应正文可以以多种不同的编码方式传输,其中一种方式是chunked传输编码。本文将详细介绍Transfer-Encoding字段的含义和chunked传输编码,以及提供示例来解释这......
  • Kubernetes statefulset
    k8s的statefulset是用用于有状态服务的部署,存储和网络都是有顺序的,会按照顺序先down掉服务再起来,所以当部署的这台服务器down掉之后,就不能down掉这个服务,而会一直处于Terminating状态,无法启动新的服务。所以单副本的应用最好用deploy进行部署,使用statefulset可能会出现这种问题。......
  • 【MRCTF2020】Ezpop_Revenge——PHP原生类SSRF
    【MRCTF2020】Ezpop_Revenge——PHP原生类SSRF1.收获CMS初审计google、baiduhackPHP原生类反序列化2.看题2.1读源码网页存在源码泄露,访问www.zip,得到源码。同时要知道,typecho模板是存在反序列化注入漏洞的,但是其存在于install.php,本题中没有这个文件,所以找找其他线索......