我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JS Angular 服务器端渲染应用设置渲染超时时间​​​​​​​

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JS Angular 服务器端渲染应用设置渲染超时时间​​​​​​​

我们用 setTimeout 模拟一个需要 5 秒钟才能完成调用的 API:

const express = require('express');
const app = express();
app.get('/api/fast', (req, res) => {
  console.log('fast endpoint hit');
  res.send({response: 'fast'});
});
app.get('/api/slow', (req, res) => {
  setTimeout(() => {
      console.log('slow endpoint hit');
      res.send({response: 'slow'});
  }, 5000);
});
app.listen(8081, () => {
  console.log('Listening');
});

然后新建一个 Angular service,调用这个 /api/slow:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable({
 providedIn: 'root'
})
export class CustomService {
 constructor(private http: HttpClient) {}
 public getFast(): Observable<any> {
   return this.http.get<any>('http://localhost:8081/api/fast');
 }
 public getSlow(): Observable<any> {
   return this.http.get<any>('http://localhost:8081/api/slow');
 }
}

在服务器端渲染模式下,等待这个 API 调用的返回,至少需要花费 5 秒钟。我们可以给这个 API 调用设置一个超时机制。如果服务器端渲染时超过我们指定的超时间隔,还没有得到 API 响应,我们就放弃这次 API 调用,让其在客户端渲染模式下继续进行。

我们使用 RouteResolver 来实现。

从 Angular route 框架导入 router

import { Resolve } from '@angular/router';

从 Angular common 开发包导入 Angular 运行环境监测的 API:

import { isPlatformBrowser } from '@angular/common';

导入 injection token,获得当前运行的 platform id:

import { Injectable, Inject, PLATFORM_ID } from '@angular/core';

新建一个 service class:

import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
import { Resolve } from '@angular/router';
import { Observable, timer } from 'rxjs';
import { isPlatformBrowser } from '@angular/common';
import { CustomService } from './custom.service';
import { takeUntil } from 'rxjs/operators';
@Injectable({
 providedIn: 'root'
})
export class SlowComponentResolverService implements Resolve<any> {
 constructor(private service: CustomService, @Inject(PLATFORM_ID) private platformId: any) { }
 public resolve(): Observable<any> {
   if (isPlatformBrowser(this.platformId)) {
     return this.service.getSlow();
   }

如果当前应用运行于浏览器端,上图的 isPlatformBrowser(this.platformId) 返回 true,因此直接调用慢速 API.

否则创建一个 Observable,500 毫秒后发射值:

const watchdog: Observable<number> = timer(500);

我们将这个 watchDog Observable 通过 pipe 设置到 this.service.getSlow 的下游。这样,如果 this.service.getSlow() 返回的 Observable 在 500 毫秒之内不 emit 值的话,watchdog 就会向 Component push null 值,否则,API 的真实 response 会推送给 Component.

我们需要更新应用相关的 routing 代码来消费这个 Resolver.

给 slowComponent 分配一个 resolver:

const routes: Routes = [
{path: '', redirectTo: 'fast', pathMatch: 'full'},
{path: 'fast', component: FastComponent},
{path: 'slow', component: SlowComponent, resolve: {response: SlowComponentResolverService}}
];

在 slowComponent 的实现代码里,从分配的 Route resolver 里读取 API response 数据:

import { Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-slow',
template: `
  <p>
    Response is: {{response | json}}
  </p>
`,
styles: []
})
export class SlowComponent {

public response: any = this.router.snapshot.data.response;
constructor(private router: ActivatedRoute) {}
}

注意这里并没有直接访问 Route Resolver:this.router.snapshot.data.response

当 API 在 500 毫秒之内返回时,所有的 slowComponent 源代码都由服务器端生成:

当 API 500 毫秒未能成功返回数据,则客户端会再次调用该 API,然后在客户端完成渲染:

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JS Angular 服务器端渲染应用设置渲染超时时间​​​​​​​

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

下载Word文档

猜你喜欢

利用 Vue Nuxt.js 和服务器端渲染增强 Web 应用的 SEO

利用 Vue Nuxt.js 和服务器端渲染 (SSR) 优化 Web 应用的 SEO
利用 Vue Nuxt.js 和服务器端渲染增强 Web 应用的 SEO
2024-02-19

Vue Nuxt.js 服务器端渲染:优化页面加载时间和提高用户参与度

Vue Nuxt.js 服务器端渲染:提升页面加载速度和用户互动
Vue Nuxt.js 服务器端渲染:优化页面加载时间和提高用户参与度
2024-02-19

服务器端渲染与 Vue Nuxt.js:提升 Web 应用速度的结合

提升 Web 应用速度的良方:服务器端渲染与 Vue Nuxt.js
服务器端渲染与 Vue Nuxt.js:提升 Web 应用速度的结合
2024-02-19

服务器端渲染与 Vue Nuxt.js:提升 Web 应用的响应能力和速度

提升 Web 应用响应能力和速度:服务器端渲染与 Vue Nuxt.js
服务器端渲染与 Vue Nuxt.js:提升 Web 应用的响应能力和速度
2024-02-19

Vue Nuxt.js 与服务器端渲染:打造快速且高效的 Web 应用

本文探讨了利用 Vue.js、Nuxt.js 和服务器端渲染 (SSR) 的强大功能来构建快速、高效的 Web 应用程序。我们将深入了解 SSR 的优势、Nuxt.js 的作用以及如何将两者结合起来创建出色的用户体验。
Vue Nuxt.js 与服务器端渲染:打造快速且高效的 Web 应用
2024-02-19

服务器端渲染与 Vue Nuxt.js:让您的 Web 应用在竞争中脱颖而出

在竞争激烈的网络环境中,服务器端渲染 (SSR) 技术和 Vue Nuxt.js 框架可为您的 Web 应用提供巨大优势,提升 SEO、性能和用户体验。
服务器端渲染与 Vue Nuxt.js:让您的 Web 应用在竞争中脱颖而出
2024-02-19

Vue Nuxt.js 中的服务器端渲染:提高大型和复杂 Web 应用的性能

大型和复杂的 Web 应用需要快速响应并提供流畅的用户体验。服务器端渲染 (SSR) 可以极大地提升这些应用的性能,显著减少加载时间和增强用户参与度。在 Vue 生态系统中,Nuxt.js 以其卓越的 SSR 功能而备受推崇。本文将深入探讨如何在 Vue Nuxt.js 中实施 SSR,并展示其对大型 Web 应用性能的显著提升。
Vue Nuxt.js 中的服务器端渲染:提高大型和复杂 Web 应用的性能
2024-02-19

VUE 路由动态加载与服务器端渲染:携手打造更快的 Web 应用

本文将重点介绍 VUE 路由动态加载和服务器端渲染的技术,这些技术可以帮助开发人员创建更快的 Web 应用程序。
VUE 路由动态加载与服务器端渲染:携手打造更快的 Web 应用
2024-02-08

编程热搜

目录