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
.