前几天有个同学问我,啥叫响应式编程?当时我正在讲课没顾得上回他。今天晚上仔细写个文章回复他,顺便我自己也学习一下。
响应式编程的英文名,Reactive Programming,那就是针对响应的呗。那啥叫响应呢?你烧水呢,水烧开了,水壶会叫,这就是一下响应了。不要想的太复杂,这些东西都是基于现实世界的需要而来的。
响应式它是依赖于事件的,响应式的代码它的运行不是按代码的顺序,而是跟多个按时间发生的事件有关。可能你会想,依赖事件?这不就是“回调”嘛,但在响应式编程里,这些按时间排列的事件,被称为“流”,stream
简单的讲,响应式中的事件序列类似于js的数组,它里面的事件流就是时间的序列。
响应式写的代码,也还是js代码,只不过响应式是一种“响应式开发的思维方式”。你可以理解为它是js代码的新的组织方式。
刚才咱们提到了,响应式编程依赖于事件,那么再想想在js里事件是什么?当然是异步呀。而事件这个东西在响应式里被做为“事件序列,被称为流,它里面包含的是事件的时间值,这些时间值就是数据。
那么可以说,响应式编程,就是异步的数据流的开发。
在这种思维中,所有的东西,都是“流”。单击鼠标是流,双击鼠标是流,鼠标hover是流,...,全是流stream,你可以操作这些流stream,什么输入,属性,回调等等。
然后你就是对这些流的各种操作,合并流,过滤流,一个流input另一个流...,没有流stream,就没有响应式编程。
刚才说了,一个流就是一串事件发生的时间的值的序列。这里面有至少三种东西,一,数据;二,报错error;三,完成。
你用js写嘛,当然还是异步的操作这些东西,监听数据,监听error,监听win事件。监听也叫“订阅”;而监听这些事件的函数,叫“观察者”;流stream就是“主体”,订阅 + 观察者等于啥?观察者模式嘛。所以说,不懂观察者模式,我个人主观觉得不太可能搞懂响应式编程。
它有啥用?干嘛的?
响应式编程,它的关注重点在于“大量的UI事件与数据的互相影响”。啥意思呢,就例如某篇文章,你点个赞,那么一、所有其它人能看到赞;二、作者本人赞数量增加;三、文章权重提升;四、作者排名可能变化;。。。更多,“一个数据的变化,它的影响可能是呈现网状扩散”。
它的特点吧,一是速度响应快,低延迟;二是健壮性弹性,有故障也能尽量响应;三是资源弹性,访问量大自动加资源,少了自动减;四是有消息自动传递。
响应式的思想,实际是观察者模式 + (stream与事件源的通信控制)。它的具体实现有一个叫,ReactiveX 是一个基于一系列可观察的异步和基础事件编程组成的一个库。有兴趣的同学可以自行了解一下。
它和函数式编程的区别,这个简单的说一下,函数式编程就是二个字,“不变”。啥都不变,一经创建永远不变。如果要变,再创建个新的。在它里面函数就是数据的通道。参数确定时,结果是可以预测的。
函数式编程的东西,等以后另外单独再写吧。