2017-07-11 1 views
0

Il est évident que xstream, avec les deux méthodes addListener et removeListener, est capable de réacheminer dynamiquement les flux (changer leurs sources et leurs puits). Je ne vois pas d'équivalent avec mostjs. Est-ce que la plupart vous permettent seulement de définir le routage des flux une fois? Dans l'affirmative, cette nature statique permet-elle à la plupart d'optimiser pour de telles performances?Déviation dynamique et dépendance circulaire avec Mostjs

En outre, xstream utilise une méthode imitate qui lui permet d'afficher des dépendances circulaires. Y a-t-il un moyen d'atteindre une dépendance circulaire avec la plupart des gens?

Répondre

3

Il existe de nombreuses fonctions dans most.js qui fonctionnent à la fois sur un Source et un Sink, par exemple, map(), qui transforme tous les événements dans un flux, agit comme un Sink par des événements consommation, et en tant que Source lors de la production nouvelles valeurs d'événement après leur avoir appliqué une fonction. observe() est un exemple d'un type particulier de Sink qui consomme des événements et les transmet à une fonction que vous fournissez.

Most.js Streams ne sont pas actifs jusqu'à ce que vous consommez, en utilisant l'un des combinateurs « terminaux », observe, drain ou reduce. Lorsque vous appelez l'un d'entre eux, le Stream envoie un signal dans la chaîne Source-Sink au Source au tout début de la chaîne. Ce producteur Source commencera alors à produire des événements.

Les événements sont ensuite propagés de manière synchrone à partir du Source via la chaîne Source-Sink par un simple appel de méthode. Ainsi, vous pourriez fournir votre propre fonction "d'écoute" à un map qui transformerait les événements.

De nombreux facteurs contribuent à la performance de most.js.

L'architecture de propagation d'événement simple pile d'appel, ainsi que le levage try/catch de mises en œuvre de Combinator étaient deux des premiers et plus grandes améliorations de performance.

Most.js exécute plusieurs autres optimisations automatiquement, basées sur les équivalences algébriques . Un exemple relativement bien connu combine des opérations multiples map, par ex. map(g, map(f, stream)), en un simple map en faisant la composition de la fonction sur f et g.

L'opération combine aussi plusieurs filter opérations, plusieurs merge opérations, plusieurs take et skip, entre autres. Ces optimisations réduisent le nombre d'appels de méthode nécessaires pour propager un événement du producteur au consommateur.

See this interview with Brian Cavalier

Most.js lui-même ne gère pas les dépendances circulaires, mais il est totalement possible d'utiliser most-proxy. Motorcycle fait ceci pour créer son cycle dans son paquet run.