Maison > interface Web > js tutoriel > Découvrez comment appliquer la programmation réactive dans Node ? Analyse des avantages et des inconvénients

Découvrez comment appliquer la programmation réactive dans Node ? Analyse des avantages et des inconvénients

青灯夜游
Libérer: 2022-02-14 20:09:17
avant
2145 Les gens l'ont consulté

Cet article vous aidera à explorer la programmation réactive avec Node.js et à vous présenter comment appliquer la programmation réactive dans Node, ainsi que ses avantages, avantages et inconvénients. J'espère qu'il sera utile à tout le monde !

Découvrez comment appliquer la programmation réactive dans Node ? Analyse des avantages et des inconvénients

La programmation réactive fournit un flux de données avancé, la possibilité de créer et de manipuler des flux d'événements de manière prévisible.

Cet article expliquera aux développeurs Node.js comment appliquer la programmation réactive dans Node, ainsi que ses avantages et ses inconvénients.

Cet article couvrira le contenu suivant.

  • Fondamentaux de la programmation réactive

  • Pourquoi envisager la programmation réactive dans Node.js ?

  • Quand utiliser les méthodes de programmation réactive

  • Avantages de la programmation réactive

  • Inconvénients de la programmation réactive

  • Introduction à l'orchestration et ses avantages/inconvénients

  • Programmation réactive pour Bibliothèque de nœuds

Qu'est-ce que la programmation réactive ?

En bref, un programme est dit réactif lorsqu'un changement d'entrée entraîne un changement correspondant de sortie, sans qu'il soit nécessaire de mettre à jour manuellement le changement de sortie. Cela permet aux ingénieurs logiciels d’éviter le stress lié à la gestion manuelle d’implémentations volumineuses.

Le paradigme de programmation réactive fonctionnelle rend notre base de code réactif facile à lire et à comprendre car il réduit l'enfer des rappels, ce qui rend les blocs de code asynchrones difficiles à lire.

Étant donné que la programmation réactive a beaucoup à voir avec les opérations asynchrones, une approche fonctionnelle nous permet de déterminer plus facilement les résultats des opérations asynchrones.

Principes de base de la programmation réactive

Opérateurs

Les opérateurs sont des méthodes sur lesquelles les observables s'appuient fortement. Ils ont les scénarios d’utilisation suivants.

  • Convertir les événements asynchrones en observables lors du traitement des requêtes asynchrones
  • Combiner des séquences de plusieurs variables observables en une seule variable observable
  • Gestion des erreurs
  • Gérer les opérations basées sur le temps

Opérations observables Les symboles incluent [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), etc. attendez. [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");
Copier après la connexion

订阅者

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

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

emitter.subscribe((value: string) => {
  console.log(`Name: ${value}`)
})
Copier après la connexion

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

Flux observable

aObservable

Un flux est un tableau de plusieurs valeurs d'entrée qui sont traitées au fil du temps. Un observable émet des événements à ses abonnés, qui à leur tour écoutent ces événements pour un traitement ultérieur. Les flux observables peuvent être combinés pour créer de nouveaux flux. Les méthodes de tableau, telles que map, reduce, filter, etc., sont utilisées pour faire fonctionner les flux.

Les valeurs peuvent être émises aux abonnés comme suit.
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));
Copier après la connexion
Copier après la connexion

Abonnés

Les abonnés observables ressemblent davantage à des itérateurs de tableau. Ils parcourent les flux observables résultants, permettant de transformer ou de traiter chaque flux. L'extrait ci-dessous montre comment s'abonner à un flux 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"
Copier après la connexion
Copier après la connexion

La programmation réactive a des méthodes d'abonnement intégrées, telles que les méthodes de cartographie emit et flatMap, qui nous permettent d'écouter chaque valeur du flux Observable et de le mettre à jour. basé sur notre Ils doivent être traités.

Normes pour les systèmes réactifs

Un système Node.js entièrement réactif doit répondre aux normes suivantes.

Architecture réactive

Un système réactif doit offrir une bonne expérience utilisateur et fournir une réponse rapide aux interactions des utilisateurs.

Architecture résiliente

L'architecture résiliente, si elle est correctement mise en œuvre, permettra au système de répondre aux erreurs sans perturber l'ensemble du système. Cette architecture garantit que chaque nœud dispose d'une réplique. Si le nœud maître échoue, il existe une sorte de repli sur d'autres nœuds disponibles.

Évolutivité🎜🎜🎜Un système doit être capable de gérer différentes charges, ceci est lié à sa capacité à évoluer lorsque l'infrastructure nécessite peu ou pas de ressources et lorsque l'infrastructure nécessite plus de ressources. Il peut être étendu pour fournir un stratégie de gestion des coûts. 🎜🎜De plus, le système devrait également être capable de gérer une charge ponctuelle. 🎜🎜Pourquoi devriez-vous envisager la programmation réactive avec Node.js ? 🎜🎜Maintenant que nous avons brièvement abordé les fondamentaux de la programmation réactive, il est également important de comprendre les raisons d'envisager une approche réactive de la programmation avec Node.js. 🎜🎜🎜Évolutivité🎜🎜🎜L'écriture de code réactif fonctionnel facilite la gestion de la base de code et améliore l'évolutivité du projet. 🎜

功能实现

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

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

在对外部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));
Copier après la connexion
Copier après la connexion

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"
Copier après la connexion
Copier après la connexion

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

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

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

总结

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

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal