RxJS的另外四种实现方式(序)
栏目: JavaScript · 发布时间: 6年前
内容简介:本人自从读过一篇来自Info的受到以上的启发,我又实现了Golang的Rx库源码请关注我的github,
-
本文适合人群:了解Rx编程人士、
Javascript
发烧友
- 本文涉及概念: 响应型编程 、 NodeJs 、 函数式编程
背景
本人自从读过一篇来自Info的 《函数式反应型编程(FRP) —— 实时互动应用开发的新思路》 后便迷恋上了Rx,甚至以当时的Rxjs库移植了一套适用于Flash的AS3.0的Rx库 ReactiveFl ,也在实际开发中不断实践体会其中的乐趣。最近在知乎上无意中看到有人提到了一个名为callbag的项目,引发了我很大的兴趣,甚至翻墙观看了作者的视频 Callback Heaven - Andre Staltz 看完视频,我久久不能平静,这是多么的奇思妙想,然而当我运行了作者代码库里面的性能测试的时候,另一个不为人所知的库出现了,叫做Most。这个库性能了得,远远超过同类的库,然后我就想是否可以结合两者的优势,创造出性能高超,但设计巧妙又通俗易懂的Rx库呢?于是我做了如下的尝试:
RxJs的四种实现方式
-
实现代码最小的库(受callbag启发)
-
性能最好的库(参考了Most)
-
利用js的生成器实现的库(突发奇想)
-
扩展Nodejs的Stream类实现的库(受Event-Stream的启发)
受到以上的启发,我又实现了Golang的Rx库
源码请关注我的github, https://github.com/langhuihui
Rx实现的关键功能
要实现一个Rx库,关键在于实现数据的推送以及消费过程中的四个基本功能:
-
订阅:即激活Rx数据流的每一个环节,生产者此时可以开始发送数据(某些生产者并不关心是否有人订阅)
-
发送/接受 数据:生产和消费的核心功能
-
完成/异常:由生产者发出的事件
-
取消订阅: 由消费者触发终止数据流,回收所有资源
生产者 (*)-------------(o)--------------(o)---------------(x)----------------|> | | | | | Start value value error Done 消费者 (*)-------------(o)--------------(o)---------------(x)----------------|> | | | | | Subscribe onNext onNext onError onComplete
上述过程中,如果用户调用了unSubscribe/Disopse的方法,就可以中断,从而不再触发任何事件
Rx的两种书写模式
-
链式编程
-
管道模式
本人利用js的Proxy类,实现了一个库同时实现两种书写模式的解决方案,我会在后续的文章中解释其中的原理。
(未完待续)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大型网站技术架构
李智慧 / 电子工业出版社 / 2013-9-1 / 59.00元
《大型网站技术架构:核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、Web 安全、系统发布、运维监控等在内的大型网站开发全景视图。 《大型网站技术架构:核心原理与案例分析》不仅适用于指导网站工程师、架构师进行网站技术架构设计,也可用于指导产品经......一起来看看 《大型网站技术架构》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
Markdown 在线编辑器
Markdown 在线编辑器