13

我正在构建一个简单的图表工具。当用户选择数据源和图表类型时,将加载特定图表 (.js) 的数据和脚本,然后代码呈现图表。

目前我使用以下顺序:

  1. 加载图表脚本
  2. 加载数据
  3. 渲染图表

为了提高性能,我想实现 Promise 并并行加载脚本和数据。像 jQuery 这样的库对我的需求来说太大了(问题的重点不是对此争论),是否有更轻量级的解决方案?也许是一个 1-2 kb 的库,或者一个教程?同样,这是一个非常基本的实现,只有两个并行操作。

[更新] 我对所有回复都投了赞成票,因为它们看起来都很棒。我会在进行更多测试后报告。

4

7 回答 7

13

我强烈建议使用Promises/A 规范的实现,它正在成为在 JavaScript 中执行 Promise 的标准方式。当每个人都使用相同的风格时,Promise 会更好地工作,因此使用兼容的实现符合每个人的利益。

Q可能是最流行和功能最齐全的实现(它也将适应 jQuery 和其他不兼容的承诺),而whenrsvp应该更“轻量级”。

于 2013-01-24T09:43:39.427 回答
7

想投入我的 2 美分,因为这里有发展。Promise 已在 JavaScript 中原生实现,并将在 FF 30 和 Chrome 33 中实现(根据此表)。

尽管在一个通常充斥着“但它是否支持 IE6?”的地方几乎不值得一提,但这里有一个 2kb 的压缩和 gzip 压缩的polyfill,“基本上是rsvp.js的 API 重新映射”。

由于 jQuery Promise并不是真正的 Promise,而且我同意这个人的观点,即 Promise 语法在库之间不一致,我的观点是,即使您的用户的浏览器可能还不支持原生 Promise,也已经值得实现。


编辑:在 Angular 和 Firefox 插件 SDK 的上下文中使用 Promises 后,两者都与Q非常相似,我更喜欢这种语法并且已经读到它仍然比本机实现更快。

于 2014-02-17T17:49:22.563 回答
4

不久前我建立了类似的东西,我称之为“当时”。我想要的东西会说,“加载所有这些东西,然后在它们完成后做一些事情”。

https://github.com/geuis/when-then

我受到了 promises 的启发,但想要一些更简单的东西来完成简单的任务。

于 2012-10-16T21:24:45.203 回答
3

检查Deferred它具有模块化构建,您可以决定只采用核心并且不应大于 1kb。

浏览器安装说明解释了如何通过几个简单的步骤创建这样的包

于 2012-10-17T09:18:56.980 回答
1

如果你想要它真的很轻巧,你应该试试sb-promise,它在 MIT 许可下。它只有几个 kbs,并且与原生 Promises 的 API 兼容。

function myFunction(){
   return new Promise(function(resolve,reject){
     resolve({some:"data"});
   }
}
myFunction().then(function(result){
   console.log(result); // {some:"data"}
});
于 2015-01-19T00:08:16.947 回答
0

尝试异步

它具有并行和串行执行操作的方法。它最初设计为在节点中运行,但现在也可以在浏览器中运行。

编辑添加:他们没有缩小版,所以完整的辣酱玉米饼馅约为 42kb。

于 2012-10-16T21:19:11.263 回答
0

我创建了一个非常轻量级的 promise 库。它不符合 A 标准,但我不想要 2,000 行长的东西。

它是 promisejs 的一个分支,但我做了一些不错的补充。

这是回购的链接。 https://github.com/taylorhakes/promise-light

于 2014-02-11T20:54:02.407 回答