我正在研究与Koa一起构建一个Web应用程序,但是我还没有完全了解Hows,whens以及为什么选择 - 并应用 - 支持"使异步更容易"的技术/方法(下面列出).
总体而言,关于此主题的网络上的不同指南仍然使事情变得模糊,特别是在不断发展的最佳实践方面,或者至少是更好的方法,以及在什么情况下.在网络上似乎很少或根本没有把它全部放在上下文中.
我希望对这个大屁股庞大的帖子做出回应可以纠正这个问题.也许下面的问题可以激发某人写一篇完整的博客文章等来解决这个问题.我的感觉是,我甚至没有接近唯一一个从中受益的人.
因此,如果明亮的社区能够帮助回答并明确以下列出的技术(粗体字),我会很高兴:
- a)如何以及在何种情况下(如适用)它们相互补充,补充,替代和/或重叠解决方案?
- b)在速度性能,错误处理容易性和调试简易性方面,他们的权衡是什么?
- c)何时,何地以及为什么使用"this"与"that"技术,技术组合和/或方法更好?
- d)哪些技术或方法(如果有的话)可能是"调光星".
(希望可以很好地解释作为答案一部分的意见.)
==============================
技术:
*Koa*
我的理解:
Koa是构建节点应用程序的最小基础,旨在利用ECMAScript-6功能,其中一个特性是生成器.
*Co*
我的理解:
- Co是一个用于运行ECMAScript-6生成器(它们是Node .011和谐的本机)的实用程序库,目的是为了编写用于运行和管理生成器的样板代码的一些/多(?)需要.
- Co本质上是Koa(?)的一部分.
具体问题:
- 如果以及如何在Koa中使用Co而不是在非Koa上下文中使用Co.换句话说,Koa是完全立面Co吗?
- 如果有更好的产品库,Co可以用Koa替换其他类似的生成器库吗?有吗?
*承诺"Q"和Bluebird*等图书馆
我的理解:
- 它们在某种意义上是"polyfill"用于实现Promises/A +规范,如果Node直到运行该规范.
- 他们还有一些非规范的便利工具,用于促进使用承诺,例如Bluebird的promisfyAll实用程序.
具体问题:
- 我的理解是ECMAScript-6规范确实/将在很大程度上反映Promises/A +规范,但即便如此,Node 0.11v和谐本身并不实现Promises.(这是正确的吗?)但是当它出现时,Q和Bluebird等技术是否正在逐步推出?
- 我读过"Q"和Bluebird支持生成器的内容.这是什么意思?例如,它在某种程度上是否意味着它们在某种程度上提供了与Co相同的效用,如果是这样,那么在多大程度上呢?
*Thunk和Promises*
我认为我对它们是什么有一个公平的处理,但希望有人可以提供一个简洁明了的"电梯间距"定义每个是什么,当然,如上所述,解释何时使用一个与另一个 - 在Koa环境中而不是在它中.
具体问题:
- 使用像Thunkify(github com/visionmedia/node-thunkify)使用像Bluebird这样的东西的赞成和利弊?
==============================
为了给这篇文章及其问题提供一些进一步的背景,如果可以对以下网页中提供的Koa技术进行讨论和对比(特别是在优点与缺点的基础上),这可能会很有趣:
- a)www.marcusoft.net/2014/03/koaintro.html(在哪里是thunk或promises,还是我没有看到什么?)
- b)strongloop.com/strongblog/node-js-express-introduction-koa-js-zone(同样,那里是thunk还是promises?)
- c)github.com/koajs/koa/blob/master/docs/guide.md("下一个"参数等于什么,设置它和在哪里?)
- d)blog.peterdecroos.com/blog/2014/01/22/javascript-generators-first-impressions(不是在Koa上下文中,但是介绍了Co与promise库(Bluebird)的使用,所以我假设这里提供的技术/模式借出本身是用在Koa(?).如果是这样,那么有多好?
谢谢大家!
似乎Bluebird在生成器/协程相关功能中重叠Co.Bluebird被认为具有出色的速度性能,所以为了讨论,(假设上述重叠前提是真的)如果想要在Koa(Node.js上下文)中替换Bluebird for Co,是否可以轻松地完成而不减少Koa的功能,如果是这样如何?
(我的猜测是它实际上无法完成,因为看起来Koa是在Co上构建的并且没有明确地暴露它,而是外观它.这样的替换似乎等于用Bootstrap中的其他东西替换jQuery)