- PVSM.RU - https://www.pvsm.ru -

The State of Reactive in JS: практический обзор FRP библиотек

Статья родилась из этого ответа на StackOverflow [1] и переросла в этот блог пост (на английском [2]), но я думаю она не утратила актуальность.

Сейчас очень много шума вокруг Reactive Programming. Я потратил какое-то время на изучение этой дисциплины применимо к JavaScript и Node.js и сложил свое мнение о самых, на мой взгляд, интересных библиотеках.

RxJS [3]

Это своего рода эталон – появление Reactive Extensions для .net, в каком-то смысле, создало эту дисциплину.

Pros:

Cons:

  • Иногда выглядит как «матан». Документации напоминают бездну – не понятно, как это все «на голову натянуть»?
  • Реализовано ребятами с Java`ой в голове (любовь к большому количеству абстракций, идиоматика из Java/.Net, иногда странные сигнатуры). Это не то чтобы плохо, просто некоторые вещи смотрятся в JS странными (пример Scheduler [8] – я так и не понял зачем это все нужно в single-thread среде). Отсюда же желание писать на TypeScript`e

Bacon.js [9]

Когда-то модная библиотека для хипстеров – сейчас все забыли

Pros

  • Хорошая документация и хорошие примеры от комьюнити (например, игра Змейка [8]);
  • Реализованы почти все примитивы из Rx*;
  • Реализовывали в первую очень для JS и JSсным бэкграундом;
  • ИМХО, очень легко начать просто пройдясь по примерам и документации.

Cons

  • Нет Backpressure – давайте просто забудем про backend разработку

Highland.js [10]

Библиотека от caolan [11] – автора async [12]

Pros:

  • Сразу писалось для JS/Node.js ребятами которые на них писали что-то большое и любят язык/платформу – а значит JS-ная идиоматика и Node.js в голове (см. следующий пункт);
  • Построенно поверх Node.js Stream [13], это обеспечело библиотеке маленький размер. Кроме того, субъективно, так намного легче про это все думать: у нас есть stream A, мы с ним что-то делаем и pipe`аем его в stream B (вот моя статья, с примером [14]);
  • backpressure – Причем насколько я понимаю ничего не нужно было писать руками, все уже есть в Node.js Stream.

Cons:

  • Слабая документацияуже получше и отсутсвие примеров. За примерами прийдется лезть в Rx или Bacon – смиритесь с этим;
  • Отсутсвие многих примитивов. Не то чтобы их сложно реализовать руками, но все же. Пример .interval и .combineLatest;
  • Очень субъективно: Флегматичное коммьюниты – сами пишут, сами кайфуют, экспансии не ведут.

Вместо итога

Из-за отстутсвия вменяемых примеров вам прийдется посмотреть все эти библиотеки, Rx* так точно. ИМХО, самая правильная Highland – люди, которые ее писали, понимают идиоматику платформы и любят ее. Самая «зрелая» RxJS – ее еще в Angular «впилили», hype-гарантирован.

Подсказка: Если вам нужно что-то спросить на StackOverflow – переводите сразу RxJS-«диалект», так с большей вероятностью ответят.

Автор: HaMI

Источник [15]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/251779

Ссылки в тексте:

[1] этого ответа на StackOverflow: http://stackoverflow.com/a/33927584/1907902

[2] на английском: https://medium.com/@kharandziuk/the-state-of-reactive-52419f47d2a3

[3] RxJS: https://github.com/Reactive-Extensions/RxJS

[4] >15000 звездочек на Github: https://github.com/Reactive-Extensions/RxJS/stargazers

[5] >3073 тэгов на SO: http://stackoverflow.com/tags/rxjs/info

[6] вот тут можно прочитать что это: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/backpressure.md

[7] по этой библиотеке есть одна книга.: https://pragprog.com/book/smreactjs/reactive-programming-with-rxjs

[8] Scheduler: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/scheduler.md

[9] Bacon.js: https://baconjs.github.io/

[10] Highland.js: http://highlandjs.org/

[11] caolan: https://github.com/caolan

[12] async: https://github.com/caolan/async

[13] Node.js Stream: https://nodejs.org/api/stream.html

[14] с примером: https://habrahabr.ru/post/325320/

[15] Источник: https://habrahabr.ru/post/325660/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best