求分析 Async, Promise, EventProxy 优劣,哪个更适合服务端用来减少回调 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
WildCat

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

  •  
  •   WildCat 2014 年 5 月 10 日 via iPhone 6545 次点击
    这是一个创建于 4364 天前的主题,其中的信息可能已经有所发展或是发生改变。
    13 条回复    2014-05-19 11:07:13 +08:00
    leojoy710
        1
    leojoy710  
       2014 年 5 月 11 日   1
    promise的最直观的好处是, 可以拿到一个"返回值"...
    rekey
        2
    rekey  
       2014 年 5 月 11 日   1
    个人感觉async和promise不相上下。eventProxy用不惯。可能是实在不知道怎么命名。
    andyhu
        3
    andyhu  
       2014 年 5 月 11 日   1
    async执行效率好些,promise更方面和强大些
    bolasblack
        4
    bolasblack  
       2014 年 5 月 11 日   1
    嗯,反正 ES6 会自带一个 Promise 对象,所以 Promise 多了解一些应该没有坏处,剩下的你哪个用着比较习惯就用哪个
    coolicer
        5
    coolicer  
       2014 年 5 月 15 日
    promise对应的是Q那个库?
    andyhu
        6
    andyhu  
       2014 年 5 月 18 日   1
    @andyhu 更新下观点,最近用async又做了很多东西,发现async功能也非常强大,只是可能多数时候promise更直观点,所以都差不多吧,不过也是不习惯event proxy
    andyhu
        7
    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
        9
    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
        10
    andyhu  
       2014 年 5 月 19 日   1
    再次更新:
    https://github.com/normalize/mz
    这个模块用bluebird包装了很多node自带的模块,另外可以结合generator使用把异步调用写的和同步一样简洁直观,不用去管node本身的实现直接拿来就用,很不错。基于蓝鸟的速度,性能也不会差哪去,觉得楼主可以试试。用之前可以看看bluebird文档
    WildCat
        11
    WildCat  
    OP
       2014 年 5 月 19 日 via iPhone
    @andyhu 谢谢啦,辛苦!
    andyhu
        12
    andyhu  
       2014 年 5 月 19 日   1
    @WildCat
    刚写了个测试bluebird并发和顺序执行混合一起的一个脚本,感觉用起来很简单,大赞,看来以后要彻底抛弃async了
    https://gist.github.com/andyhu/c0b3e2c262ad3a17ec3b
    如果电脑里有fiddler,开启fiddler后可以看到这些请求的次序
    WildCat     13
    WildCat  
    OP
       2014 年 5 月 19 日 via iPhone
    @andyhu
    太感谢了!上课比较忙…晚上来拜读下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     931 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 19:50 PVG 03:50 LAX 12:50 JFK 15:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86