WildCat
V2EX  ›  Node.js

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

  •  
  •   WildCat · May 10, 2014 via iPhone · 6979 views
    This topic created in 4563 days ago, the information mentioned may be changed or developed.
    13 replies  •  2014-05-19 11:07:13 +08:00
    leojoy710
    leojoy710
    May 11, 2014❤️1
    1
    promise的最直观的好处是, 可以拿到一个"返回值"...
    rekey
    rekey
    May 11, 2014❤️1
    2
    个人感觉async和promise不相上下。eventProxy用不惯。可能是实在不知道怎么命名。
    andyhu
    andyhu
    May 11, 2014❤️1
    3
    async执行效率好些,promise更方面和强大些
    bolasblack
    bolasblack
    May 11, 2014❤️1
    4
    嗯,反正 ES6 会自带一个 Promise 对象,所以 Promise 多了解一些应该没有坏处,剩下的你哪个用着比较习惯就用哪个
    coolicer
    coolicer
    May 15, 2014
    5
    promise对应的是Q那个库?
    andyhu
    andyhu
    May 18, 2014❤️1
    6
    @andyhu 更新下观点,最近用async又做了很多东西,发现async功能也非常强大,只是可能多数时候promise更直观点,所以都差不多吧,不过也是不习惯event proxy
    andyhu
    andyhu
    May 19, 2014
    7
    再更新下,又有些新的发现,看下下面的performance对比图吧,看了下bluebird和ES6 promise polyfill不错,语法都大同小异,但性能略微有差别,代码在这个测试里也有
    http://jsperf.com/promise-comparisons/105
    另外这篇文章介绍了各种不同的方式也有各自优劣对比
    http://blog.namangoel.com/dealing-with-callback-hell
    文章里最后介绍的Reactive programming也有点意思
    andyhu
    andyhu
    May 19, 2014
    9
    再次更新:
    之前讲的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
    andyhu
    May 19, 2014❤️1
    10
    再次更新:
    https://github.com/normalize/mz
    这个模块用bluebird包装了很多node自带的模块,另外可以结合generator使用把异步调用写的和同步一样简洁直观,不用去管node本身的实现直接拿来就用,很不错。基于蓝鸟的速度,性能也不会差哪去,觉得楼主可以试试。用之前可以看看bluebird文档
    WildCat
    WildCat
    OP
    May 19, 2014 via iPhone
    11
    @andyhu 谢谢啦,辛苦!
    andyhu
    andyhu
    May 19, 2014❤️1
    12
    @WildCat
    刚写了个测试bluebird并发和顺序执行混合一起的一个脚本,感觉用起来很简单,大赞,看来以后要彻底抛弃async了
    https://gist.github.com/andyhu/c0b3e2c262ad3a17ec3b
    如果电脑里有fiddler,开启fiddler后可以看到这些请求的次序
    WildCat
    WildCat
    OP
    May 19, 2014 via iPhone
    13
    @andyhu
    太感谢了!上课比较忙…晚上来拜读下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1794 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 06:40 · PVG 14:40 · LAX 22:40 · JFK 01:40
    ♥ Do have faith in what you're doing.