其他语言版本:English
EasyReact 是一个简单易用的响应式编程库。
你是否对 RxSwift 和 ReactiveCocoa 中的 functor、applicative、monad 感到困惑不解?没关系,那些概念太复杂了,以至于并没有多少人真的在实际项目中使用它们。有没有简单易用的响应式编程方式呢?EasyReact 就是为此而生的,来试试吧。
注:以下列出的“节点”均指EZRNode
,即 EasyReact 中对各种值(所有对象类型)的一种统一表示。
- 创建节点或可变节点
- 立即获得节点的值
- 对节点的未来值进行监听
- 取消对一个节点的监听
- 以某种形式连接两个点
- 对一个节点进行基本变换
- 对多个节点进行组合
- 对一个节点进行分支得到多个节点
- 对多个节点进行值同步
- 对节点进行高阶变换
- 对节点和边进行遍历
对比其他函数响应式库(例如 ReactiveCocoa 或 ReactiveX)
项目 | EasyReact | ReactiveCocoa | ReactiveX |
---|---|---|---|
核心概念 | 图论和面向对象编程 | 函数式编程 | 函数式编程和泛型编程 |
传播可变性 | ✅ | ❌ | ❌ |
基本变换 | ✅ | ✅ | ✅ |
组合变换 | ✅ | ✅ | ✅ |
高阶变换 | ✅ | ✅ | ✅ |
遍历节点 / 信号 | ✅ | ❌ | ❌ |
多语言支持 | Objective-C (其他语言开源计划中) | Objective-C、Swift | 大量语言 |
性能 | 较快 | 慢 | 快 |
中文文档支持 | ✅ | ❌ | ❌ |
调试工具 | 拓扑图展示 更多丰富的动态调试工具(开源计划中) |
Instrument | ❌ |
- iOS 8.0 +
- Xcode 8.0 +
clone 本项目,在 Example 文件夹下执行pod install
,然后打开EasyReact.xcworkspace
.
在Podfile
中添加
pod 'EasyReact'
然后运行pod install
即可
EasyReact 包含了完善的单元测试,相关代码在 Example/Tests 文件夹下。你可以打开示例工程并执行 Test 命令来运行这些单元测试。
编译平台: macOS High Sierra 10.13.5
IDE: Xcode 9.4.1
真机设备: iPhone X 256G iOS 11.4(15F79)
- listener, map, filter, flattenMap等单阶操作
- combine, zip, merge等多点聚合操作
- syncWith操作
其中测试的规模基于操作对象个数10,触发次数1000。如Listener方法 有10个监听者,重复触发发送值的行为1000次。 时间单位为ns。
重复上面的实验10次,得到数据平均值如下:
name | listener | map | filter | flattenMap | combine | zip | merge | syncWith |
---|---|---|---|---|---|---|---|---|
EasyReact | 1860665 | 30285707 | 7043007 | 7259761 | 6234540 | 63384482 | 19794457 | 12359669 |
ReactiveCocoa | 4054261 | 74416369 | 45095903 | 44675757 | 209096028 | 143311669 | 13898969 | 53619799 |
RAC:EasyReact | 217.89% | 245.71% | 640.29% | 615.39% | 3353.83% | 226.10% | 70.22% | 433.83% |
基于Objective-C语言实现的EasyReact和ReactiveCocoa:
ReactiveCocoa 平均耗时是 EasyReact 的 725.41%
EasyReact 的 swift 版本即将开源,届时会和 RxSwift 进行 benchmark 的比较。
William Zang, chengwei.zang.1985@gmail.com
姜沂, nero_jy@qq.com
Qin Hong, qinhong@face2d.com
SketchK, zhangsiqi1988@gmail.com
zesming, ming9010@gmail.com
Zhiyu Wong, www312422@vip.qq.com
johnnywjy, johnny.wjy07@gmail.com
qiezishu, qiezishu@yahoo.com
EasyReact 使用 Apache Public License 2.0 许可证。
想要一起共同发展 EasyReact 么?发送简历到 邮件 加入我们!