最近、いくつかの node.js ネイティブ機能のベンチマークを試みたところ、理解できない不気味な結果が見つかりました。これは、私がベンチマークし、結果をベンチマークした簡単なコードです。
200 の同時実行で 100,000 件のリクエストに対して、1 秒あたり 8553 件のリクエストを正常に処理したことがわかります。その後、友人から、この場合は async を使用しないように指示されました。このループはノードのイベント ループを妨げるほど大きくないため、コードをリファクタリングして for ループを使用すると、ベンチマークの結果がさらに増加しました高い:
ここでは、1 秒あたり 9174 のリクエストがあります。きちんとした。(不思議なことに、反復回数を 10k に変更した場合でも、for ループ バージョンは async バージョンより一貫して高速でした)。
しかし、私の友人は、ループが終了した後にすべてのデータをダンプする代わりに、ストリーミングを使用してこの結果をさらにプッシュできるかどうか迷っていました。ここでも、データ出力を処理するために res.write を使用するようにコードをリファクタリングしました。
aaaaand 1 秒あたり 2860 のリクエストがあります。ここで何が起こったのですか?ストリームの書き込みが遅いのはなぜですか? 私のコードに何らかのエラーがありますか、それともノードが実際にストリームを処理する方法ですか?
apt インストールのデフォルト設定では、ubuntu のノード バージョンは 0.10.25 です。
また、最初に JXCore と HHVM (ノード コードの async.js バージョンを使用) に対して同じコードをテストしました。結果はhttp://pastebin.com/6tuYGhYGで、ノード クラスターが最新の jxcore 2.3 よりも高速であるという興味深い結果が得られました。 .2.
どんな批評でも大歓迎です。
編集: @Mscdex、res.write() の呼び出しが問題だったのではないかと思ったので、データを res で消費するために作成された新しいストリームにプッシュする方法を変更しました。私は素朴に、おそらくこの方法のノードが何らかの方法で出力バッファリングを最適化し、効果的な方法でデータをストリーミングできると信じていました。このソリューションも機能しましたが、以前よりもさらに遅くなりました。