> 웹 프론트엔드 > JS 튜토리얼 > Node에서 반응형 프로그래밍을 적용하는 방법을 살펴보세요. 장점과 단점 분석

Node에서 반응형 프로그래밍을 적용하는 방법을 살펴보세요. 장점과 단점 분석

青灯夜游
풀어 주다: 2022-02-14 20:09:17
앞으로
2138명이 탐색했습니다.

이 글은 Node.js를 이용한 리액티브 프로그래밍을 살펴보고 Node에서 리액티브 프로그래밍을 적용하는 방법과 그 장점, 장단점을 소개하는 데 도움이 될 것입니다.

Node에서 반응형 프로그래밍을 적용하는 방법을 살펴보세요. 장점과 단점 분석

반응형 프로그래밍은 고급 데이터 흐름, 즉 예측 가능한 방식으로 이벤트 스트림을 생성하고 조작하는 기능을 제공합니다.

이 글에서는 Node.js개발자에게 Node에서 반응형 프로그래밍을 적용하는 방법과 그 장점과 단점에 대해 설명합니다.

이 글에서는 다음 내용을 다룰 예정입니다.

  • 리액티브 프로그래밍의 기초

  • Node.js에서 리액티브 프로그래밍을 고려하는 이유는 무엇인가요?

  • 리액티브 프로그래밍 방법을 사용해야 하는 경우

  • 리액티브 프로그래밍의 이점

  • 리액티브 프로그래밍의 단점

  • 오케스트레이션 소개 및 장점/단점

  • 노드용 리액티브 프로그래밍 도서관

반응형 프로그래밍이란 무엇인가요?

간단히 말하면, 출력 변경을 수동으로 업데이트할 필요 없이 입력 변경으로 인해 해당 출력 변경이 발생하는 경우 프로그램이 반응적이라고 합니다. 이를 통해 소프트웨어 엔지니어는 대규모 구현을 수동으로 처리해야 하는 스트레스를 피할 수 있습니다.

함수형 반응형 프로그래밍 패러다임을 사용하면 비동기 코드 블록을 읽기 어렵게 만드는 콜백 지옥을 줄일 수 있으므로 반응형 코드 기반을 쉽게 읽고 이해할 수 있습니다.

반응형 프로그래밍은 비동기 작업과 많은 관련이 있으므로 함수형 접근 방식을 사용하면 비동기 작업의 결과를 더 쉽게 확인할 수 있습니다.

리액티브 프로그래밍의 기본 원리

Operators

Operator는 Observable이 크게 의존하는 메서드입니다. 다음과 같은 사용 시나리오가 있습니다.

  • 비동기 요청을 처리할 때 비동기 이벤트를 Observable로 변환
  • 여러 관찰 가능한 변수의 시퀀스를 단일 관찰 가능한 변수로 결합
  • 오류 처리
  • 시간 기반 작업 처리

관찰 가능한 작업 기호에는 [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) 메서드 등 기다려 보세요. [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}`)
})
로그인 후 복사

反应式编程有一些内置的订阅方法,如emitflatMap

관찰 가능한 스트림

aObservable

스트림은 시간이 지남에 따라 처리되는 여러 입력 값의 배열입니다. Observable은 구독자에게 이벤트를 내보내고 구독자는 추가 처리를 위해 이러한 이벤트를 수신합니다. 관찰 가능한 스트림을 결합하여 새로운 스트림을 생성할 수 있습니다. map, reduce, filter 등과 같은 배열 메서드는 스트림을 작동하는 데 사용됩니다.

값은 다음과 같이 구독자에게 방출될 수 있습니다.
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));
로그인 후 복사
로그인 후 복사

Subscribers

Observable 구독자는 배열 반복자와 비슷합니다. 결과 Observable 스트림을 반복하여 각 스트림을 변환하거나 처리할 수 있습니다. 아래 스니펫은 Observable 스트림을 구독하는 방법을 보여줍니다.

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"
로그인 후 복사
로그인 후 복사

반응형 프로그래밍에는 Observable 스트림의 각 값을 수신하고 업데이트할 수 있는 emit flatMap 맵 메서드와 같은 몇 가지 내장 구독 메서드가 있습니다. 우리의 기준에 따라 처리가 필요합니다.

리액티브 시스템 표준

완전 리액티브 Node.js 시스템은 다음 표준을 충족해야 합니다.

반응형 아키텍처

반응형 시스템은 좋은 사용자 경험을 제공해야 하며 사용자 상호 작용에 적시에 응답해야 합니다.

복원력 있는 아키텍처

복원력 있는 아키텍처를 올바르게 구현하면 시스템이 전체 시스템을 중단하지 않고 오류에 대응할 수 있습니다. 이 아키텍처는 각 노드에 복제본이 있음을 보장합니다. 마스터 노드에 장애가 발생하면 사용 가능한 다른 노드에 대한 대체 조치가 있습니다.

Scalability🎜🎜🎜시스템은 다양한 로드를 처리할 수 있어야 하며 이는 인프라에 리소스가 거의 또는 전혀 필요하지 않을 때와 인프라에 더 많은 리소스가 필요할 때 규모를 축소할 수 있는 능력과 관련이 있습니다. 비용 관리 전략. 🎜🎜또한 시스템은 특정 시점 로드도 처리할 수 있어야 합니다. 🎜🎜Node.js를 사용한 반응형 프로그래밍을 고려해야 하는 이유는 무엇입니까? 🎜🎜이제 리액티브 프로그래밍의 기본 사항에 대해 간략하게 논의했으므로 Node.js 프로그래밍에 리액티브 접근 방식을 고려해야 하는 이유를 이해하는 것도 중요합니다. 🎜🎜🎜Scalability🎜🎜🎜기능적 반응형 코드를 작성하면 코드 베이스 관리가 더 쉬워지고 프로젝트의 확장성이 향상됩니다. 🎜

功能实现

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

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

在对外部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 教程

위 내용은 Node에서 반응형 프로그래밍을 적용하는 방법을 살펴보세요. 장점과 단점 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:juejin.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿