Node.js反应式编程的优缺点是什么,如何应用
Admin 2022-07-14 群英技术资讯 250 次浏览
反应式编程提供了先进的数据流,能够以一种可预测的方式创建和操作事件流。
本文将告诉Node.js开发者如何在Node中应用反应式编程,以及它的好处和利弊。
本文将涉及以下内容。
反应式编程的基本原理
为什么考虑在Node.js中进行反应式编程?
何时使用反应式编程方法
反应式编程的好处
反应式编程的弊端
介绍协调和它的好处/利弊
Node的反应式编程库
简而言之,当输入的变化导致输出的相应变化,而不需要手动更新输出的变化时,就可以说一个程序是反应式的。这使得软件工程师可以绕过手动处理巨大实现的压力。
功能性的反应式编程范式使我们的反应式代码库很容易被阅读和理解,因为它减少了回调地狱,这使得异步的代码块难以阅读。
由于反应式编程与异步操作有很大关系,函数式方法使我们更容易确定异步操作的结果。
操作符是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<string> = of("Sam", "Ray", "Thomas");
Observable订阅器更像是数组迭代器。它们在产生的Observable流中循环,使之有可能转换或处理每个流。
下面的片段展示了如何订阅一个Observable流。
emitter.subscribe((value: string) => { console.log(`Name: ${value}`) })
反应式编程有一些内置的订阅方法,如emit
和flatMap
map方法,这些方法允许我们监听Observable流的每个值,并根据我们的需要对它们进行处理。
一个完全反应式的Node.js系统应该满足以下标准。
一个反应式系统应该拥有良好的用户体验,对用户的互动提供及时的响应。
弹性架构,如果正确实施,将允许系统响应错误而不破坏整个系统。
这种架构确保每个节点都有一个复制品。如果主节点发生故障,在其他可用的节点上会有某种回退。
系统应该能够处理不同的负载,这与它的能力有关,当基础设施需要很少或没有资源时,它可以缩小规模,而当基础设施需要更多资源时,它可以扩大规模,以便提供一个有效的成本管理策略。
此外,该系统也应该能够处理时间点的负载。
现在我们已经简要地讨论了反应式编程的基本原理,了解考虑用Node.js进行编程的反应式方法的原因也很重要。
编写功能性的反应式代码可以更容易地管理代码库,提高项目的可扩展性。
对于需要定期修改功能或增加新功能的项目来说,编写功能性反应式代码使得新功能更容易被添加到现有项目中。
在对外部API进行异步请求时,我们确实会遇到一些时间限制的约束。这些限制可以用反应式编程方法有效地处理。
实施反应式编程范式将极大地减少实现特定功能所需的代码量。
在反应式编程诞生之前,用Node.js构建微服务需要协调所有服务互动的协调器模式。
协调器模式的一个典型用例是在电子商务应用中拥有微服务,这些微服务按顺序处理以下任务:从购物车中获取客户订单,计算总金额,生成账单,在成功付款后,更新产品库存并创建一个订单ID,并向卖家提供Pending
。
虽然这提供了一个系统的方法来处理应用程序的逻辑流程,但依赖关系紧密耦合的一个主要缺点会破坏整个系统。例如,如果前面的服务出现故障,那么所有的依赖服务都不会被执行。
反应式编程不是一个万能的方法,但它在一些特定的情况下是非常合适的。
虽然功能化的反应式编程方法减少了协调器模式遇到的缺点,但它不能取代协调器模式,因为它有自己的缺点。
这是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是另一个用于反应式编程的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.js和Knockout.js相同的反应式原理。
其他用于反应式编程的JavaScript库包括。
在这篇文章中,我们探讨了反应式编程,它的好处,以及何时最适合我们的Node.js项目。此外,我们还讨论了协调、其好处/利弊以及用于Node.js中反应式编程的JavaScript库。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了vue实现秒杀倒计时组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章给大家分享的是用JS实现动态的验证码干扰效果,有很多验证码干扰都做了这个效果,小编觉得挺实用的,因此分享给大家做个参考,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
这篇文章主要介绍了JS相册图片抖动放大展示效果的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
最近在做一个前端vue.js对接的功能模块时,需要实现一个下载图片的功能,本文就介绍了vue.js根据图片url进行图片下载,感兴趣的可以了解一下
package.json文件有什么用?接触前端的朋友应该常常能看到package.json文件,本文我们就来详细的了解一下package.json文件的用户,及package.json文件的各种字段,接下来我们一起学习一下吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008