AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

Node.js异步编程@朴灵

发布者 jsconf   简介 JavaScript 技术大会相关演讲
发布于 1430052861707  浏览 8465 关键词 Node.JS, JavaScript 
分享到

第1页

Node.js异步编程

Asynchronous Programming by @朴灵



13年7月6⽇日星期六





第2页

About me

• @朴灵/⽥田永强 • 就职阿⾥里数据平台产品部开发⼯工程师 • 《深⼊入浅出Node.js》专栏(书)作者



13年7月6⽇日星期六





第3页

Agenda

• Pyramid of Doom • Callbacks • Events • Deferred/Promise • Flow Control

13年7月6⽇日星期六





第4页

Pyramid of Doom



13年7月6⽇日星期六





第5页

别笑,我是回调函数



13年7月6⽇日星期六





第6页

排个序



13年7月6⽇日星期六





第7页

再排个序



13年7月6⽇日星期六





第8页

⾼高阶函数

• 可以将函数作为参数或者返回值 • map, filter, forEach, reduce, every?



13年7月6⽇日星期六





第9页

⾼高阶函数



13年7月6⽇日星期六





第10页

常⻅见场景



13年7月6⽇日星期六





第11页

嵌套过深怎解?

• 视图渲染分别需要如下资源: • 数据 • 模版 • 本地化资源



13年7月6⽇日星期六





第12页

⻚页⾯面渲染



13年7月6⽇日星期六





第13页

问题还是没有解决

• 性能差!!! • 代码丑!!! • ⽼老⼦子再也不写Node.js



13年7月6⽇日星期六





第14页

13年7月6⽇日星期六





第15页

• ⼀一个能搞定回调函数嵌套问题的男⼈人



13年7月6⽇日星期六





第16页

初阶EventProxy



13年7月6⽇日星期六





第17页

EventProxy好处



13年7月6⽇日星期六





第18页

EventProxy好处

• 不再串⾏行执⾏行,并⾏行异步,效率提升



13年7月6⽇日星期六





第19页

EventProxy好处

• 不再串⾏行执⾏行,并⾏行异步,效率提升 • 通过事件传递数据



13年7月6⽇日星期六





第20页

EventProxy好处

• 不再串⾏行执⾏行,并⾏行异步,效率提升 • 通过事件传递数据 • 搞定嵌套函数过深的问题



13年7月6⽇日星期六





第21页

EventProxy好处

• 不再串⾏行执⾏行,并⾏行异步,效率提升 • 通过事件传递数据 • 搞定嵌套函数过深的问题 • 对结果收敛,不执着细节



13年7月6⽇日星期六





第22页

主要⼿手段

• 计数器 • 事件

13年7月6⽇日星期六





第23页

问题

• 事件必须先绑定,后触发

13年7月6⽇日星期六





第24页

Deferred/Promise

• CommonJS之Promise规范 • Promise/A • Promise/B • Promise/D



13年7月6⽇日星期六





第25页

⺫⽬目的

• 异步的⾏行为与逻辑的绑定分离 • 顺便解决代码嵌套的问题

13年7月6⽇日星期六





第26页

典型应⽤用



13年7月6⽇日星期六





第27页

基本原理

• 状态机

13年7月6⽇日星期六





第28页

状态转换



未完 成态



完成态 失败态



13年7月6⽇日星期六





第29页

then



13年7月6⽇日星期六





第30页

Deferred/Promise关系

• Deferred主内,改变内部状态 • resolve • reject • Promise主外,接受外部逻辑 • then



13年7月6⽇日星期六





第31页

完成态



未完 成态



deferred



失败态



then(sucess, error)

promise



13年7月6⽇日星期六





第32页

deferred



promise



then



then



13年7月6⽇日星期六





第33页

⽰示例



13年7月6⽇日星期六





第34页

实现Promise



13年7月6⽇日星期六





第35页

实现Deferred



13年7月6⽇日星期六





第36页

⽰示例



13年7月6⽇日星期六





第37页

解决多异步协作



13年7月6⽇日星期六





第38页

⻚页⾯面渲染



13年7月6⽇日星期六





第39页

Deferred/Promise

• Note:本实现不严谨 • Deferred/Promise⾮非常易⽤用 • 缺点:要为每个异步场景预先封装



13年7月6⽇日星期六





第40页

Events VS Promise

• 事件 • 异步调⽤用过程⽆无需处理 • 需要预置业务逻辑 • Promise • 需要预先封装异步过程 • 调⽤用代码干净

13年7月6⽇日星期六





第41页

更好的流程控制

• 不要前戏、要⾼高潮



13年7月6⽇日星期六





第42页

Async.js



13年7月6⽇日星期六





第43页

Step



13年7月6⽇日星期六





第44页

实现原理

• 玩转⾼高阶函数 • 逻辑注⼊入

13年7月6⽇日星期六





第45页

13年7月6⽇日星期六





第46页

13年7月6⽇日星期六





第47页

别忘了异常处理



13年7月6⽇日星期六





第48页

感觉?

• 不⾼高端 • 不⼤大⽓气 • 不上档次

13年7月6⽇日星期六





第49页

13年7月6⽇日星期六





第50页

⻚页⾯面渲染



13年7月6⽇日星期六





第51页

⻚页⾯面渲染



13年7月6⽇日星期六





第52页

Wind.js

• 基于Task的Promise • 利⽤用编译技巧让⼈人同步写代码

13年7月6⽇日星期六





第53页

ES6 Harmony

• Generators/Yield



13年7月6⽇日星期六





第54页

总结

• 事件 • 队列 • 计数器 • ⾼高阶函数

13年7月6⽇日星期六





第55页

阿⾥里数据平台招聘

• Web⼯工程师(Node) • 前端⼯工程师 • 数据可视化 • 数据相关职位 • 私信:@朴灵 • 邮件:puling.tyq@taobao.com

13年7月6⽇日星期六





支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。