Clojure前端开发栈: 基于ClojureScript的Core.Async

14-08-26 banq
              

Core.Async是一个基于ClojureScript前端开发库包,见:Github案例

传统的异步编程问题:

1.嵌套的回调难以维护和理解

2.JS是单线程

3.JS promises虽然改进很多,易于阅读,虽然没有嵌套回调,还是有很多回调链。

4.JS ES6 generator相当低级别,Core.Async能发挥同样的优点,但是抽象级别更高。

ClojureScript的特点:

1.Cognitect 编写应用的同样类型,但是更简单。

2.不可变性

3.ClojureScript能够使用Clojure 平台和JS运行库包有很好交互。

为什么要使用ClojureScript?

1.首先能和JS运行库包有很好交互

2.能够平衡Google的Clojure编译库包

JS会有很多打包和交付的方法,但是CLjs只使用Closure;超级小和压缩,无膨胀代码;基于Battle(Battle-tested )测试标准库包,能支持IE6.

Core.Async是什么?

1.基于CSP(communicating sequential processes),能一次性获取异步任务和异步流队列(如鼠标移到)。

2.Go blocks能将表面上堵塞的操作切换非堵塞,即使在单线程场景下。

Core.Async术语:

1. Channel: 不同进程之间的管道,可以放入或取出值。涉及两个子术语:Buffer – channel使用它们配置backpressure, 处理事件的奔流burst; Transducer:有效控制数值进入和推出Channel

2. Go block: 一个异步非堵塞执行代码块,但是表面上好像是堵塞操作,方便习惯顺序编程者。

Core操作:

1.将值放入channel

2.将值取出Channel

3.基于多Channel的选择

              

1