Статья родилась из этого ответа на StackOverflow и переросла в этот блог пост(на английском), но я думаю она не утратила актуальность.
Сейчас очень много шума вокруг Reactive Programming. Я потратил какое-то время на изучение этой дисциплины применимо к JavaScript и Node.js и сложил свое мнение о самых, на мой взляд, интересных библиотеках.
RxJS
Pros:
- Это своего рода эталон – появление Reactive Extensions для .net в каком-то смысле создало эту дисциплину
- Документация и большое коммьюнити(>15000 звездочек на Github,>3073 тэгов на SO)
- Это библиотека из семейства Rx*, а значит использует тот же интерфейс. Практически, это значит что иногда можно смотреть примеры из RxJava и оригильно Reactive Extensions
- Есть примитивы почти на все случаи жизни
- есть backpressure(вот тут можно прочитать что это)
- по этой библиотеке есть одна книга
Cons:
- Иногда выглядит как «матан». Документации напоминают бездну – не понятно, как это все «на голову натянуть»?
- Реализовано ребятами с Java`ой в голове(любовь к большому количеству абстракций, идиоматика из Java/.Net, иногда странные сигнатуры). Это не то чтобы плохо, просто некоторые вещи смотрятся в JS страными(пример Scheduler – я так и не понял зачем это все нужно в single-thread среде). Отсюда же желание писать на TypeScript`e
Bacon.js
Когда-то модная библиотека для хипстеров – сейчас все забыли
Pros
- Хорошая документация и хорошие примеры от комьюнити(например, игра Змейка)
- реализованы почти все примитивы из Rx*
- Реализовывали в первую очень для JS и JSсным бэкграундом
- ИМХО, очень легко начать просто пройдясь по примерам и документации
Cons
- Нет Backpressure – давайте просто забудем про backend разработку
Highland.js
Библиотека от caolan – это тот который написал async
Pros:
- Сразу писалось для JS/Node.js ребятами которые на них писали что-то большое и любят язык/платформу – а значит JS-ная идиоматика и Node.js в голове(см. следующий пункт)
- Построенно поверх Node.js Stream, это обеспечело библиотеке маленький размер. Кроме того, субъективно, так намного легче про это все думать: у нас есть stream A, мы с ним что-то делаем и pipe`аем его в stream B(вот моя статья, с примером)
- backpressure – Причем насколькольо я понимаю ничего не нужно было писать руками, все уже есть в Node.js Stream
Cons:
Слабая документацияуже получше и отсутсвие примеров. За примерами прийдется лезть Rx или Bacon – смиритесь с этим- Отсутсвие многих примитивов. Не то чтобы их сложно реализовать руками, но все же. Пример .interval и .combineLatest
- Очень субъективно: Флегматичное коммьюниты – сами пишут, сами кайфуют, экспансиии не ведут
Вместо итога
Из-за отстутсвия вменяемых примеров вам прийдется посмотреть все эти библиотеки, Rx* так точно. ИМХО, самая правильная Highland – люди, которые ее писали, понимают идиоматику платформы и любят ее. Самая «зрелая» RxJS – ее еще в Angular «впилили», hype-гарантирован.
Подсказка: Если вам нужно что-то спросить на StackOverflow – переводите сразу RxJS-«диалект», так с большей вероятностью ответят.
ссылка на оригинал статьи https://habrahabr.ru/post/325660/
Добавить комментарий