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

2014-05-10 23:53:18 +08:00
 WildCat
6023 次点击
所在节点    Node.js
13 条回复
leojoy710
2014-05-11 00:12:40 +08:00
promise的最直观的好处是, 可以拿到一个"返回值"...
rekey
2014-05-11 02:13:02 +08:00
个人感觉async和promise不相上下。eventProxy用不惯。可能是实在不知道怎么命名。
andyhu
2014-05-11 02:18:25 +08:00
async执行效率好些,promise更方面和强大些
bolasblack
2014-05-11 16:30:45 +08:00
嗯,反正 ES6 会自带一个 Promise 对象,所以 Promise 多了解一些应该没有坏处,剩下的你哪个用着比较习惯就用哪个
coolicer
2014-05-15 10:09:43 +08:00
promise对应的是Q那个库?
andyhu
2014-05-18 04:31:09 +08:00
@andyhu 更新下观点,最近用async又做了很多东西,发现async功能也非常强大,只是可能多数时候promise更直观点,所以都差不多吧,不过也是不习惯event proxy
andyhu
2014-05-19 06:06:56 +08:00
再更新下,又有些新的发现,看下下面的performance对比图吧,看了下bluebird和ES6 promise polyfill不错,语法都大同小异,但性能略微有差别,代码在这个测试里也有
http://jsperf.com/promise-comparisons/105
另外这篇文章介绍了各种不同的方式也有各自优劣对比
http://blog.namangoel.com/dealing-with-callback-hell
文章里最后介绍的Reactive programming也有点意思
andyhu
2014-05-19 06:07:31 +08:00
andyhu
2014-05-19 06:17:44 +08:00
再次更新:
之前讲的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-05-19 06:52:54 +08:00
再次更新:
https://github.com/normalize/mz
这个模块用bluebird包装了很多node自带的模块,另外可以结合generator使用把异步调用写的和同步一样简洁直观,不用去管node本身的实现直接拿来就用,很不错。基于蓝鸟的速度,性能也不会差哪去,觉得楼主可以试试。用之前可以看看bluebird文档
WildCat
2014-05-19 07:02:18 +08:00
@andyhu 谢谢啦,辛苦!
andyhu
2014-05-19 10:30:57 +08:00
@WildCat
刚写了个测试bluebird并发和顺序执行混合一起的一个脚本,感觉用起来很简单,大赞,看来以后要彻底抛弃async了
https://gist.github.com/andyhu/c0b3e2c262ad3a17ec3b
如果电脑里有fiddler,开启fiddler后可以看到这些请求的次序
WildCat
2014-05-19 11:07:13 +08:00
@andyhu
太感谢了!上课比较忙…晚上来拜读下

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

https://www.v2ex.com/t/111961

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

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

© 2021 V2EX