RxJS 系列教程-什么是 RxJS?

RxJS 可以解决的问题

  • 我们知道传统的 for,while 对循环体中的异步程序是无法感知的,或者说,它们不会等待异步程序执行完毕再进入下一轮循环。
  • 错误处理是任何程序都要解决的问题,本身就已很复杂的回调函数中再嵌入 try/catch 块吗?如果还想加入重试机制呢?
  • 商业逻辑内嵌在回调函数中,可读性差,复杂度高。现如今流行的组件化编程,即可重用,又可解耦,还方便测试;
  • 闭包是强大的,过度地使用闭包将导致我们不得不谨慎地审视变量的作用域以及其值。再加上共享变量带来的副作用,混杂在 if/else 条件语句和 for 循环中,每天都会有修不完的 bug;
  • 根据事件或耗时操作无响应的时间进行取消操作;
  • 自己实现 throttling 和 debouncing 是很困难的(二者区别见http://www.jianshu.com/p/e91775195608)
  • 众所周知的事件监听带来的内存泄露问题;

RxJS 可以优雅地替代 callback,或者基于 promises 的任何第三方库,使我们可以使用一个编程模型来对待任何数据源(除了远程 http 请求,Node.js 中的 Event
Emitter 也使用的是回调机制)。也就是说,我们可以用 RxJS 来处理读取文件,http 请求,鼠标点击,鼠标移动这些事件。

数据的流动和传播

事件必然伴随着数据的产生,在响应式编程的世界中,我们把任何可以被使用的数据源统称为流(Stream)。我们再来看一下什么是响应式编程模型:

1
2
3
var x = 1;
var y = 2;
var z = x + y; // z = ? x = 2; // z = ?
阅读更多

RxJS 系列-你应该知道的一些知识

程序的可扩展性,可伸缩性

一个应用,当处理少量数据时,可以保证用户界面响应迅速,动画流畅;但当面对大量数据涌入的时候,还能做到以上的保证,我们就可以说此应用具备了可扩展性,可伸缩性。

同步和异步

同步方式运行的程序最容易理解,语句一条一条执行,下一条要等上一条执行完才能执行。但现实中并不是每条语句都可以迅速完成,比如一个网络请求,一个数据库查询,一个复杂计算等等都会导致一条语句变成耗时操作,阻塞了程序的继续执行,导致了应用程序没有响应,带来了极差的用户体验。众所周知,Javascript 是单线程模式,该如何解决耗时操作问题?没错,就是 callback(回调)函数。

回调函数其实在 Javascript 随处可见,鼠标键盘事情的处理,远程 http 请求以及文件 io 操作等等。我们提供给耗时操作一个函数,当耗时操作返回时,Javascript
runtime 会立刻执行这个函数。与此同时,我们的程序并没有被阻塞,继续一条一条的执行下去。这就是以异步方式运行程序。

时间和空间

阅读更多