0

0

探索Node中如何应用反应式编程?优缺点分析

青灯夜游

青灯夜游

发布时间:2022-02-14 20:09:17

|

2343人浏览过

|

来源于掘金社区

转载

本篇文章带大家用node.js探索一下反应式编程,介绍一下在node中应用反应式编程的方法,以及它的好处和利弊,希望对大家有所帮助!

探索Node中如何应用反应式编程?优缺点分析

反应式编程提供了先进的数据流,能够以一种可预测的方式创建和操作事件流。

本文将告诉Node.js开发者如何在Node中应用反应式编程,以及它的好处和利弊。

本文将涉及以下内容。

  • 反应式编程的基本原理

  • 为什么考虑在Node.js中进行反应式编程?

  • 何时使用反应式编程方法

  • 反应式编程的好处

  • 反应式编程的弊端

  • 介绍协调和它的好处/利弊

  • Node的反应式编程库

什么是反应式编程?

简而言之,当输入的变化导致输出的相应变化,而不需要手动更新输出的变化时,就可以说一个程序是反应式的。这使得软件工程师可以绕过手动处理巨大实现的压力。

功能性的反应式编程范式使我们的反应式代码库很容易被阅读和理解,因为它减少了回调地狱,这使得异步的代码块难以阅读。

由于反应式编程与异步操作有很大关系,函数式方法使我们更容易确定异步操作的结果。

反应式编程的基本原理

操作符

操作符是Observables严重依赖的方法。它们有以下使用情况。

  • 在处理异步请求时,将异步事件转换为Observables
  • 将多个可观察变量的序列组合成一个单一的可观察变量
  • 错误处理
  • 处理基于时间的操作

可观察操作符包括[filter(...)](https://rxjs.dev/api/operators/filter),[mergeMap(...)](https://rxjs.dev/api/operators/mergeMap),[of](https://rxjs.dev/api/index/function/of),[from](https://rxjs.dev/api/index/function/from),[concat](https://rxjs.dev/api/index/function/concat) 方法,等等。

可观察流

一个Observable流是一个由多个输入值组成的数组,它随着时间的推移被处理。一个Observable流向它的订阅者发出事件,而订阅者又听从这些事件进行进一步处理。可观察的流可以被组合来创建新的流。数组方法,如map,reduce,filter ,等等,都是用来操作流的。

值可以按以下方式发射给订阅者。

import { of, Observable } from "rxjs"; 
const emitter : Observable = of("Sam", "Ray", "Thomas");

订阅者

Observable订阅器更像是数组迭代器。它们在产生的Observable流中循环,使之有可能转换或处理每个流。

下面的片段展示了如何订阅一个Observable流。

emitter.subscribe((value: string) => {
  console.log(`Name: ${value}`)
})

反应式编程有一些内置的订阅方法,如emitflatMap map方法,这些方法允许我们监听Observable流的每个值,并根据我们的需要对它们进行处理。

反应式系统的标准

一个完全反应式的Node.js系统应该满足以下标准。

响应式架构

一个反应式系统应该拥有良好的用户体验,对用户的互动提供及时的响应。

弹性架构

弹性架构,如果正确实施,将允许系统响应错误而不破坏整个系统。

聚蜂消防BeesFPD
聚蜂消防BeesFPD

关注消防领域的智慧云平台

下载

这种架构确保每个节点都有一个复制品。如果主节点发生故障,在其他可用的节点上会有某种回退。

可扩展性

系统应该能够处理不同的负载,这与它的能力有关,当基础设施需要很少或没有资源时,它可以缩小规模,而当基础设施需要更多资源时,它可以扩大规模,以便提供一个有效的成本管理策略。

此外,该系统也应该能够处理时间点的负载。

为什么要考虑Node.js的反应式编程?

现在我们已经简要地讨论了反应式编程的基本原理,了解考虑用Node.js进行编程的反应式方法的原因也很重要。

可扩展性

编写功能性的反应式代码可以更容易地管理代码库,提高项目的可扩展性。

功能实现

对于需要定期修改功能或增加新功能的项目来说,编写功能性反应式代码使得新功能更容易被添加到现有项目中。

与时间相关的错综复杂的问题

在对外部API进行异步请求时,我们确实会遇到一些时间限制的约束。这些限制可以用反应式编程方法有效地处理。

减少代码的冗长性

实施反应式编程范式将极大地减少实现特定功能所需的代码量。

引入协调和它的好处/权衡

在反应式编程诞生之前,用Node.js构建微服务需要协调所有服务互动的协调器模式。

协调器模式的一个典型用例是在电子商务应用中拥有微服务,这些微服务按顺序处理以下任务:从购物车中获取客户订单,计算总金额,生成账单,在成功付款后,更新产品库存并创建一个订单ID,并向卖家提供Pending

虽然这提供了一个系统的方法来处理应用程序的逻辑流程,但依赖关系紧密耦合的一个主要缺点会破坏整个系统。例如,如果前面的服务出现故障,那么所有的依赖服务都不会被执行。

在Node.js中何时使用反应式编程方法

反应式编程不是一个万能的方法,但它在一些特定的情况下是非常合适的。

  • 当需要将应用流分散到可管理的微服务中时,反应式编程模式是非常合适的。
  • 当需要在有限的时间内将应用交付给生产时
  • 当前面的一个依赖性的临时关闭会导致整个系统的崩溃时
  • 当有很多异步的代码块,而等待的结果可能被延迟时,反应式编程也是非常合适的。

Node.js中的反应式编程的弊端

虽然功能化的反应式编程方法减少了协调器模式遇到的缺点,但它不能取代协调器模式,因为它有自己的缺点。

  • 分解应用流程并分布在所有服务中所产生的冗余代码块
  • 为了构建反应式服务,需要对流和事件循环有一个全面的了解

Node.js中流行的反应式编程库

RxJS

这是JavaScript中最流行的反应式编程库之一,被积极维护。

在写这篇文章的时候,RxJS正在从v7过渡到v8,它在上周有超过2700万次的下载。这次过渡的特点是重写了库的性能,更好的模块化,更好的可调试的调用堆栈,以及向后的兼容性。

下面是一个快速的RxJS使用例子。

import { range } from "rxjs";
import { map, filter } from "rxjs/operators";

range(1, 200)
  .pipe(
    filter(result => result % 2 === 1),
    map(result => result * 2 )
  )
  .subscribe(result => console.log(result));

Reactor.js

Reactor.js是另一个用于反应式编程的JavaScript库。虽然与Bacon.js和Rxjs相比,它还不是很流行,但它以轻量而闻名。使用Reactor.js在复杂的数据模型中保持一致性要容易得多,因为它能自动跟踪反应式变量,并在任何反应式变量的值发生变化时重新触发观察者。
使用Reactor.js,不需要手动设置订阅/监听器,因为依赖关系会自动为你设置。

下面是一个Reactor.js使用的快速例子。

const reactor = new Reactor({ name: "Doe" });

observe(() => {
  console.log("My name is ", reactor.name);
}); // prints "My name is Doe"

reactor.name = "John "; // prints "My name is John"

Reactor是基于与Bacon.jsKnockout.js相同的反应式原理。

其他用于反应式编程的JavaScript库包括。

  • Flyd
  • Bacon.js
  • Knockout.js
  • Kefir
  • 大多数

总结

在这篇文章中,我们探讨了反应式编程,它的好处,以及何时最适合我们的Node.js项目。此外,我们还讨论了协调、其好处/利弊以及用于Node.js中反应式编程的JavaScript库。

希望你能发现这篇文章的信息量和帮助。

更多node相关知识,请访问:nodejs 教程

相关专题

更多
公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

0

2026.01.15

公务员调剂条件 2026调剂公告时间
公务员调剂条件 2026调剂公告时间

(一)符合拟调剂职位所要求的资格条件。 (二)公共科目笔试成绩同时达到拟调剂职位和原报考职位的合格分数线,且考试类别相同。 拟调剂职位设置了专业科目笔试条件的,专业科目笔试成绩还须同时达到合格分数线,且考试类别相同。 (三)未进入原报考职位面试人员名单。

4

2026.01.15

国考成绩查询入口 国考分数公布时间2026
国考成绩查询入口 国考分数公布时间2026

笔试成绩查询入口已开通,考生可登录国家公务员局中央机关及其直属机构2026年度考试录用公务员专题网站http://bm.scs.gov.cn/pp/gkweb/core/web/ui/business/examResult/written_result.html,查询笔试成绩和合格分数线,点击“笔试成绩查询”按钮,凭借身份证及准考证进行查询。

2

2026.01.15

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

63

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

32

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

73

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

20

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

25

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 8.6万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

Node.js-前端工程化必学
Node.js-前端工程化必学

共19课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号