4

Bluebird は、ジェネレーター/コルーチン関連の機能で Co と重複しているようです。Bluebird は並外れた速度性能を持つと信じられているため、議論のために (前述の重複前提が正しいと仮定して) Koa (Node.js コンテキスト) で Co を Bluebird に置き換えたい場合、Koa のパフォーマンスを低下させることなく簡単に実行できますか?機能性、もしそうならどのように?

(私の推測では、Koa は Co の上に構築されており、Co を明示的に公開していないように見えるため、実際には実行できないと思いますが、それをファサード化します。そのような置換は、jQuery を Bootstrap で別のものに置き換えるのと同じように思われます)

4

2 に答える 2

8

まず、bluebird と co はそのような比較対象ではありません。Bluebird.coroutinevs co(コルーチンの略)という意味です。

Bluebird.coroutineここで、との違いはcoco特定のハードコーディングされた型のセットのみを生成できることです。は任意の型の生成をBluebird.coroutineサポートするように構成できますが、たとえばドキュメントには、サンクとコールバックを生成するためのサポートを追加する方法の例が含まれています。

非同期ジェネレーターは非常に単純であるため、実装間の唯一の違いは、生成できる型とその実行方法です。良くも悪くもなる余地はあまりありません。

ただしbluebird.coroutine、これは bluebird の機能のほんの一部です。

ジェネレーターは、一連のアクションを冗長にするという問題のみを解決します。リソース管理、同時実行調整、エラー処理、キャンセル + タイムアウト、長いスタック トレースなど、より高度なニーズに対応する便利な機能がたくさんあります。これは、サンク/コールバック/最小限のプロミスによって強化された非同期ジェネレーターしかない場合は不可能または非常に苦痛です。


co共同サポートがサポートするすべての利回りタイプを構成してから、次を使用するだけで、 のドロップイン置換を行うことができbluebird.coroutineます。

var co = require("bluebird").coroutine;
// Configure all yield types you need using co.addYieldHandler
// See documentation for examples
module.exports = co;

ただし、リクエスト ハンドラで実際に直接実行する必要があるコードはほとんどないため、これは実際には意味がありません。ただし、リクエスト ハンドラが呼び出す関数は実行されます。そして、これらの関数は koa によって助けられないので (うーん、koa のポイントは何ですか? :D)、直接 bluebird コルーチンにすることができます。

于 2014-05-30T06:15:07.043 に答える
-5

esailijaは Bluebird についてこう言いました。

コールバックやサンクなどを生成するだけでなく、頭に浮かぶ任意のものを許可する機能が追加されています。ブルーバードも最速です。したがって、このバージョンの後、koa は実際に bluebird を使用する必要があります。https://github.com/petkaantonov/bluebird/issues/131#issuecomment-36975495を参照してください

そうは言っても、私は彼を信じていません。そして、ブルーバード ラッパーが Co よりも高速になるとは思いません。Co.js は機能しており、現在 Bluebird.js をテストに合格させる方法はありません。ES6 を使用している場合は、Bluebird を完全に無視して Co.

于 2014-05-27T17:47:00.907 に答える