求分析 Async, Promise, EventProxy 优劣,哪个更适合服务端用来减少回调

2014 年 5 月 10 日
 WildCat
6628 次点击
所在节点    Node.js
13 条回复
leojoy710
2014 年 5 月 11 日
promise的最直观的好处是, 可以拿到一个"返回值"...
rekey
2014 年 5 月 11 日
个人感觉async和promise不相上下。eventProxy用不惯。可能是实在不知道怎么命名。
andyhu
2014 年 5 月 11 日
async执行效率好些,promise更方面和强大些
bolasblack
2014 年 5 月 11 日
嗯,反正 ES6 会自带一个 Promise 对象,所以 Promise 多了解一些应该没有坏处,剩下的你哪个用着比较习惯就用哪个
coolicer
2014 年 5 月 15 日
promise对应的是Q那个库?
andyhu
2014 年 5 月 18 日
@andyhu 更新下观点,最近用async又做了很多东西,发现async功能也非常强大,只是可能多数时候promise更直观点,所以都差不多吧,不过也是不习惯event proxy
andyhu
2014 年 5 月 19 日
再更新下,又有些新的发现,看下下面的performance对比图吧,看了下bluebird和ES6 promise polyfill不错,语法都大同小异,但性能略微有差别,代码在这个测试里也有
http://jsperf.com/promise-comparisons/105
另外这篇文章介绍了各种不同的方式也有各自优劣对比
http://blog.namangoel.com/dealing-with-callback-hell
文章里最后介绍的Reactive programming也有点意思
andyhu
2014 年 5 月 19 日
andyhu
2014 年 5 月 19 日
再次更新:
之前讲的async效率好些,是针对q promise和绝大多数promise的实现,但是刚看了hacker news上的评论, 有人测试了下好像bluebird比async还快,内存占用也更低。另外我用async做一个比较复杂的东西的时候,发现虽然功能很强,但还是很麻烦代码会变得不容易理解和修改,很不直观。如果promise执行效率比async快的话,还是推荐promise。以后ES6 promise也是内置的了,代码迁移会方便很多。而async方式要想重构代码会比较麻烦。

https://news.ycombinator.com/item?id=6494622

file time(ms) memory(MB)
promiseishBluebird.js 1076 76.08
async.js 2634 113.79
promiseishKew.js 2654 123.50
promiseishQ.js 56508 804.21
andyhu
2014 年 5 月 19 日
再次更新:
https://github.com/normalize/mz
这个模块用bluebird包装了很多node自带的模块,另外可以结合generator使用把异步调用写的和同步一样简洁直观,不用去管node本身的实现直接拿来就用,很不错。基于蓝鸟的速度,性能也不会差哪去,觉得楼主可以试试。用之前可以看看bluebird文档
WildCat
2014 年 5 月 19 日
@andyhu 谢谢啦,辛苦!
andyhu
2014 年 5 月 19 日
@WildCat
刚写了个测试bluebird并发和顺序执行混合一起的一个脚本,感觉用起来很简单,大赞,看来以后要彻底抛弃async了
https://gist.github.com/andyhu/c0b3e2c262ad3a17ec3b
如果电脑里有fiddler,开启fiddler后可以看到这些请求的次序
WildCat
2014 年 5 月 19 日
@andyhu
太感谢了!上课比较忙…晚上来拜读下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/111961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX