JS是单线程的,如何实现高性能,用户友好的Web。异步请求是永恒的话题。
这篇文章是这个系列的最后一篇,我主要想谈谈React系列当中状态管理最重要的一层-Redux.但是重点不会太拘泥于工具的使用,而是谈谈在工具背后的,我对JS异步的一点理解。或有勘误,欢迎指出。
Flux && Redux
redux是个什么东西呢,他是一个数据池。
你可以把你想存的任何数据都存放在这个数据池当中。在页面的任何一个角落,你都可以拿到数据池中最新的数据。这些数据往往都是你渲染页面所必须的。有了这个池子,你就可以对大量的数据进行一个统一的管理,实现统一的,收束的处理中间件。而不是以前的数据都杂乱无章的分布在各个模块当中,为了拿到最新的数据,我们可能做很多重复的工作,发很多冗余的请求,给应用徒增压力。而且,不够优雅。
用MVC来解释Flux架构
谈起Redux就必须谈谈孕育他的架构思想—Flux.
Flux不是一个具体的工具,而是一个思路,不过不同于上面我所描述的数据池那么抽象。他更加贴近工程,更加贴近具体的实现本身。Flux的核心就是单向数据流。维护一个单向数据流,最常见的就是MVC结构,我使用MVC来理解Flux.
V
Flux架构当中V就是UI层,它依靠M传递过来的数据实现更新。不过在React这样的声明式UI出来之前,实现更新这样的操作并不友好。
一是如何实现UI对数据的监听,如果都是手动的将UI和M通过设置监听来处理的话。UI组件数量一上去,数据量一上去,其中的对应关系,层级关系的处理会变得非常棘手。
二是如何实现选择性更新,数据的变化不一定必须引起UI的全局更新,为了更好的性能就要实现局部的更新。但是如果要做局部更新,那么如何做到差异监测?
多亏现在有了React、Immutable等等这样的工具。让我们很轻松的实现UI与数据的绑定。 UI = f(state) 不再是一句空话。
more >>