由于 Bluebird 体积太大,重造了一个 Promise 库

2015-05-17 17:10:42 +08:00
 ysmood

项目地址:yaku

由于一些轻型项目只需要使用最基本 Promise 功能,比如移动端,而现有的库不是太大就是功能不够完善,比如我向这个库提的这个 issue 无法被采纳。

这个库浏览器支持到 IE5+,体积只有 3.2KB,无任何依赖,比其他同类库小很多(Bluebird / 73KB, ES6-promise / 18KB)。对性能和异常处理做了优化。单测覆盖率 100%。如果你想学习 Promise 细节,这个库会是个不错的起点,我专门为此写了一个仅 80 行的实现,更多细节可以去看看 readme。

也是看了这个帖子,有感而发。我就埋头做事,不发表任何评论。

5594 次点击
所在节点    分享创造
35 条回复
ysmood
2015-05-18 00:39:37 +08:00
@otakustay 抱歉,话说的可能重了点,就是论事而已。

题外话,可以试着自动生成文档。打个硬广吧,可以用我写的 nokit 自动生成文档,yaku就是用它生成的 readme。好玩的是 nokit 也依赖了 yaku。nokit 这个用于替代 gulp,更好用。看看 yaku 怎么用 nokit 的就行了。
otakustay
2015-05-18 00:43:10 +08:00
@ysmood 这个好,nokit以前确实没听过,去看看

老实说,有兴趣的话,真的一起补一下aplus-test吧,那东西有多不全其实我们都是知道的,更别说这货在浏览器里跑用上browserify也会有点小问题,被折腾了蛮久……
ysmood
2015-05-18 01:13:58 +08:00
@otakustay 我不打算入 aplus-test 的坑了,我另有计划,我打算把 Bluebird 的 test suite 抽离出来,它的单测应该是业界比较可信的,是实践的结果。
coolicer
2015-05-18 08:23:28 +08:00
es6 原生自带的啊
ysmood
2015-05-18 10:13:01 +08:00
@coolicer 但当下并不是所有浏览器都实现了ES6
coolicer
2015-05-18 10:58:52 +08:00
@ysmood 使用babeljs之后的,可以转成es5,眼下大部分浏览器支持es5
coolicer
2015-05-18 10:59:11 +08:00
打错字,之类,不是之后。
iwege
2015-05-18 11:09:22 +08:00
bluebird 对catch的加强实际用起来的时候很赞。另外建议helper 可以做插件用户自己require。
ysmood
2015-05-18 11:49:02 +08:00
@coolicer 我读过 babeljs 用的 core-js 来实现 Promise,这个实现很大,我刚测了最新的 babel,编译之后 minify 了也有 20KB,太大了,而且也不支持 unhandled rejection 和 long stack trace。性能也没看到有太多优化:

Node v1.8.1
OS darwin
Arch x64
CPU Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
--------------------------------------------------------------------------------
yaku
total: 234ms
init: 155ms
resolution: 79ms
memory: rss - 115mb | heapTotal - 96mb | heapUsed - 76mb
babel-runtime
total: 770ms
init: 527ms
resolution: 243ms
memory: rss - 190mb | heapTotal - 172mb | heapUsed - 150mb

比 yaku 慢了接近 3 倍
ysmood
2015-05-18 11:53:59 +08:00
@iwege 对 catch 已经有所加强了,但还有很多可优化空间,之后有时间会进一步加强。helper 这个我不是很理解,能具体解释下吗?
iwege
2015-05-18 12:43:46 +08:00
@ysmood
API 模块化,类似lodash,想要用到哪个就用添加哪个。

Bluebird的catch是可以针对特定类型Error进行相关的处理,这个的方法比较简单也避免了自己去写if else的判断,代码可读性比不用要高很多。
coolicer
2015-05-18 13:25:31 +08:00
重新看了帖子,项目还是好。能不能换个名字,让它跟promise沾边,我个人很怕用那些奇怪名字,因为不认识。像bluebird,起码也是个单词,好吧,都是无关重要的观点。
ysmood
2015-05-18 13:27:14 +08:00
@lwege 了解了,可以加到扩展里去,但基础库不会有这个功能。当时我就是被 bluebird error 的这层 wrap 恶心到过,才想自己写个库的,它这么干会和原生写法不兼容。

要扩展加个 xcatch 之类的就行了,比如你 new error 的时候,用库提供的些标准 error 类型,这时就能用 xcatch 到指定 type 的 error。

关于 lodash 模块话 API 这个确实可以做,多谢提醒~
ysmood
2015-05-18 20:03:43 +08:00
@coolicer 一开始就在 FAQ 里说了名字的问题,就是怕这样的吐槽,这名字其实就是 promise 的意思,只是换了一个语言而已,否则取名字太困难了,好的名字都被别人抢了。
coolicer
2015-05-21 08:43:46 +08:00
老是跟youku联想起来 = =

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

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

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

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

© 2021 V2EX