iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >使用 Angular 服务器端渲染 Transfer State Service
  • 681
分享到

使用 Angular 服务器端渲染 Transfer State Service

2024-04-02 19:04:59 681人浏览 薄情痞子
摘要

假设我们使用 angular Universal 开发一个服务器端渲染的 Angular 应用,这个应用会消费一个第三方的 Restful api. 上述场景分为下列六个步骤: 用户

假设我们使用 angular Universal 开发一个服务器端渲染的 Angular 应用,这个应用会消费一个第三方的 Restful api.

上述场景分为下列六个步骤:

  • 用户向部署了 Angular 服务器端应用的 node.js 服务器发起页面请求
  • node.js 调用第三方 Restful API,
  • 第三方 Restful API 返回结果,这个结果被用于渲染最后的页面
  • 服务器端渲染的页面,返回给浏览器
  • Angular 在浏览器中引导,并再次调用 Restful API
  • Restful API 返回给浏览器,Angular 客户端应用重新将数据渲染到视图中。

我们可以通过创建 TransferState 服务来提高应用程序的效率,该服务是在 Node.js 服务器和浏览器中呈现的应用程序之间交换的一个键值注册表。

我们将通过一个 Http_INTERCEPTOR 机制来使用它,该机制将驻留在 HttpClient 服务中,并将操纵请求和响应。

创建一个新的 class,实现 HttpInterceptor 接口定义的 intercept 方法:

@Injectable({
 providedIn: 'root'
})
export class HttpInterceptorService implements HttpInterceptor
public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>

每当对 HttpClient 服务执行任何 API 调用时,都会调用此方法。

为了简单起见,我们仅针对 GET 方法启用 TransferState:

if (request.method !== 'GET') {
     return next.handle(request);
   }

我们根据 GET 请求的 URL 生成一个密钥。 我们将使用键值对来存储或检索请求响应,具体取决于请求是在服务器端还是浏览器端处理:

const key: StateKey<string> = makeStateKey<string>(request.url);

为了区分服务器和浏览器运行环境,我们使用@angular/common库中的 isPlatfORMServer 方法以及 PLATFORM_ID 注入令牌:

 if (isPlatformServer(this.platformId)) {
       //serverSide
   } else {
       //browserSide
   }

当服务器端渲染时,我们将 API 结果写入 Transfer State 注册表中:

 if (isPlatformServer(this.platformId)) {
    return next.handle(request).pipe(tap((event) => {
      this.transferState.set(key, (<HttpResponse<any>> event).body);
    }));

在浏览器端代码中,我们要检查给定 HTTP 请求的响应是否已经驻留在 Transfer State 注册表中。 如果存在,我们直接从注册表中取出值,并清除注册表,以便将来的调用可以存储新数据,并将响应返回给调用者。

当且仅当注册表中不存在给定的键,我们才在客户端环境下执行 HTTP 调用。

  else {
    const storedResponse = this.transferState.get<any>(key, null);
    if (storedResponse) {
      const response = new HttpResponse({body: storedResponse, status: 200});
      this.transferState.remove(key);
      return of(response);
    } else {
      return next.handle(request);
    }
  }

到此这篇关于使用 Angular 服务器端渲染 Transfer State Service的文章就介绍到这了,更多相关 Angular Transfer State Service内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 使用 Angular 服务器端渲染 Transfer State Service

本文链接: https://www.lsjlt.com/news/152713.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用 Angular 服务器端渲染 Transfer State Service
    假设我们使用 Angular Universal 开发一个服务器端渲染的 Angular 应用,这个应用会消费一个第三方的 Restful API. 上述场景分为下列六个步骤: 用户...
    99+
    2024-04-02
  • JS Angular 服务器端渲染应用设置渲染超时时间​​​​​​​
    我们用 setTimeout 模拟一个需要 5 秒钟才能完成调用的 API: const express = require('express'); const ...
    99+
    2024-04-02
  • Angular中如何实现服务端渲染
    这篇文章主要介绍Angular中如何实现服务端渲染,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Angular UniversalAngular在服务端渲染方面提供一套前后端同构解决...
    99+
    2024-04-02
  • Angular 服务器端渲染缓存功能问题
    关于通过 Angular Universal 渲染出的页面源代码,我们有两种缓存方式: HTTP cache 使用网络缓存时,一切都是为了在服务器上设置正确的响应标头。 它们指定缓存...
    99+
    2024-04-02
  • 一文探究Angular中的服务端渲染(SSR)
    使用 SSR 的好处对 SEO 更加友好虽然现在包括 Google 在内的某些搜索引擎和社交媒体声称已经能支持对由 JavaScript(JS)驱动的 SPA(Single-Page Application)应用进行爬取,但是结果似乎差强人...
    99+
    2023-05-14
    SSR Angular
  • React服务器端渲染怎么用
    这篇文章给大家分享的是有关React服务器端渲染怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。React 提供了两个方法 renderToString 和 renderTo...
    99+
    2024-04-02
  • 如何使用C++进行服务器端渲染?
    使用c++++实现服务器端渲染(ssr)具有以下优点:更快的初始页面加载时间更好的搜索引擎优化 (seo)访问服务器端资源和功能在c++中,可以使用poco库进行服务器端渲染:安装poc...
    99+
    2024-05-12
    c++ 服务器端渲染 搜索引擎优化
  • Angular 服务器端渲染应用常见的内存泄漏问题小结
    目录屏幕闪烁问题无法通过 API 的方式终止渲染考虑如下的 Angular 代码: import { Injectable, NgZone } from "@angular/core...
    99+
    2024-04-02
  • 使用React怎么对服务端进行渲染
    使用React怎么对服务端进行渲染?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。服务器端编写 React 组件如果是客户端渲染,浏览器首先会向浏览器发送请求,服...
    99+
    2023-06-06
  • 如何使用React Router4实现服务端渲染ssr
    这篇文章将为大家详细讲解有关如何使用React Router4实现服务端渲染ssr,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们已经熟悉React 服务端渲染(SSR...
    99+
    2024-04-02
  • Vue服务端渲染和Vue浏览器端渲染性能对比的示例分析
    Vue服务端渲染和Vue浏览器端渲染性能对比的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。本人在做Vue项目的时候,一直苦于产品...
    99+
    2024-04-02
  • 使用node-canvas在服务端渲染echarts图表解析
    目录踩了很长时间的坑,总算是能跑起来了友情提示:入坑请慎重在这个过程中,还有可能报错,比较常见的有这些我只说说我试过有用的办法踩了很长时间的坑,总算是能跑起来了 但是如果要我给ech...
    99+
    2022-11-13
    使用node-canvas 渲染echarts图表 node-canvas渲染echarts图表
  • 使用 Vue Nuxt.js 和服务器端渲染构建高性能 Web 应用
    服务器端渲染 (SSR) 是一种技术,它允许在服务器端渲染应用程序并将其作为完全呈现的页面发送给客户端。与客户端渲染 (CSR) 相比,SSR 具有许多优势,包括更快的页面加载时间、更好的 SEO 和更安全的应用程序。 Vue Nuxt....
    99+
    2024-02-19
    Vue Nuxt.js 服务器端渲染 性能优化
  • Vue项目中如何实现服务器端渲染
    本篇内容介绍了“Vue项目中如何实现服务器端渲染”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue-ssr在项目中的实践写在文前由于前端脚...
    99+
    2023-06-04
  • Vue组件中服务器端渲染的示例分析
    这篇文章主要为大家展示了“Vue组件中服务器端渲染的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue组件中服务器端渲染的示例分析”这篇文章吧。现在,...
    99+
    2024-04-02
  • 服务器端渲染:Vue Nuxt.js 性能提升的秘诀
    服务器端渲染 (SSR) 是一种技术,它将 Vue 组件在服务器上渲染成 HTML,然后发送给浏览器。与客户端渲染 (CSR) 相比,SSR 具有以下优势: 更快的页面加载时间:SSR 将渲染后的 HTML 发送给浏览器,因此页面可以...
    99+
    2024-02-19
    服务器端渲染 Vue Nuxt.js 性能优化 页面速度
  • 利用 Vue Nuxt.js 和服务器端渲染增强 Web 应用的 SEO
    引言 在当今快节奏的数字环境中,网站和应用程序的搜索引擎优化 (SEO) 至关重要。对于使用 Vue.js 构建的应用程序,Nuxt.js 提供了强大的功能,可以利用服务器端渲染 (SSR) 大幅提升 SEO 性能。本文将深入探讨 Nux...
    99+
    2024-02-19
    Vue Nuxt.js SEO 服务器端渲染 静态生成
  • 服务器端渲染:解锁 Vue Nuxt.js 的性能潜力
    服务器端渲染 (SSR) 的工作原理 SSR 是一种渲染技术,它在服务器上而不是客户端上呈现页面。当浏览器请求页面时,服务器将执行应用程序代码,生成 HTML 并将其作为响应返回。此过程消除了客户端渲染的需要,从而提高了初始页面加载性能...
    99+
    2024-02-19
    服务器端渲染 Vue Nuxt.js 性能优化
  • Vue Nuxt.js 中的服务器端渲染:使用案例、优点和最佳实践
    服务器端渲染 (SSR) 是在服务器端生成 HTML 页面并将预渲染的页面发送至浏览器的技术。在 Vue Nuxt.js 中,SSR 是一种强大工具,可以提升应用程序的性能、用户体验和搜索引擎优化 (SEO)。 用例: 提升初始加载速...
    99+
    2024-02-19
    Vue Nuxt.js SSR SEO 性能
  • VUE 嵌套路由与 SSR:服务器端渲染的魔力
    嵌套路由是一种在 Vue.js 中组织路由的强大技术。它允许您创建具有多个级别的路由层次结构,从而使复杂应用程序的导航更加简洁和直观。嵌套路由的优势包括: 模块化和可重用性:您可以将路由组织成模块化组件,从而可以轻松地重用和维护。 代码...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作