首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前几天有个同学问我,“什么是响应式编程”?另,它和函数式编程有啥区别?

前几天有个同学问我,“什么是响应式编程”?另,它和函数式编程有啥区别?

作者头像
web前端教室
发布2018-02-07 12:06:26
1.3K0
发布2018-02-07 12:06:26
举报
文章被收录于专栏:web前端教室web前端教室

前几天有个同学问我,啥叫响应式编程?当时我正在讲课没顾得上回他。今天晚上仔细写个文章回复他,顺便我自己也学习一下。

响应式编程的英文名,Reactive Programming,那就是针对响应的呗。那啥叫响应呢?你烧水呢,水烧开了,水壶会叫,这就是一下响应了。不要想的太复杂,这些东西都是基于现实世界的需要而来的。

响应式它是依赖于事件的,响应式的代码它的运行不是按代码的顺序,而是跟多个按时间发生的事件有关。可能你会想,依赖事件?这不就是“回调”嘛,但在响应式编程里,这些按时间排列的事件,被称为“流”,stream

简单的讲,响应式中的事件序列类似于js的数组,它里面的事件流就是时间的序列。

响应式写的代码,也还是js代码,只不过响应式是一种“响应式开发的思维方式”。你可以理解为它是js代码的新的组织方式。

刚才咱们提到了,响应式编程依赖于事件,那么再想想在js里事件是什么?当然是异步呀。而事件这个东西在响应式里被做为“事件序列,被称为流,它里面包含的是事件的时间值,这些时间值就是数据。

那么可以说,响应式编程,就是异步的数据流的开发。

在这种思维中,所有的东西,都是“流”。单击鼠标是流,双击鼠标是流,鼠标hover是流,...,全是流stream,你可以操作这些流stream,什么输入,属性,回调等等。

然后你就是对这些流的各种操作,合并流,过滤流,一个流input另一个流...,没有流stream,就没有响应式编程。

刚才说了,一个流就是一串事件发生的时间的值的序列。这里面有至少三种东西,一,数据;二,报错error;三,完成。

你用js写嘛,当然还是异步的操作这些东西,监听数据,监听error,监听win事件。监听也叫“订阅”;而监听这些事件的函数,叫“观察者”;流stream就是“主体”,订阅 + 观察者等于啥?观察者模式嘛。所以说,不懂观察者模式,我个人主观觉得不太可能搞懂响应式编程。

最快速度搞懂:Js观察者模式,为学习vue源码而准备

它有啥用?干嘛的?

响应式编程,它的关注重点在于“大量的UI事件与数据的互相影响”。啥意思呢,就例如某篇文章,你点个赞,那么一、所有其它人能看到赞;二、作者本人赞数量增加;三、文章权重提升;四、作者排名可能变化;。。。更多,“一个数据的变化,它的影响可能是呈现网状扩散”。

它的特点吧,一是速度响应快,低延迟;二是健壮性弹性,有故障也能尽量响应;三是资源弹性,访问量大自动加资源,少了自动减;四是有消息自动传递。

响应式的思想,实际是观察者模式 + (stream与事件源的通信控制)。它的具体实现有一个叫,ReactiveX 是一个基于一系列可观察的异步和基础事件编程组成的一个库。有兴趣的同学可以自行了解一下。

它和函数式编程的区别,这个简单的说一下,函数式编程就是二个字,“不变”。啥都不变,一经创建永远不变。如果要变,再创建个新的。在它里面函数就是数据的通道。参数确定时,结果是可以预测的。

函数式编程的东西,等以后另外单独再写吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 web前端教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档