
すべての人に良い一日を!
今年、クロスプラットフォームアプリケーション開発のフレームワークであるFlutterのリリースに伴い、Dart言語の誇大広告が増加しています。 完璧主義者のように 先延ばし退屈怠け者 Dart仮想マシンのサーバー実装のパフォーマンスを、Node.jsの人の潜在的な敵と比較することを考えました。 ダートが勝つという希望が私の中で燃え上がっているとすぐに言わなければなりません、そして私は次の3つの5年の期間のために私に潜在的な競争相手に対する優位性を与える聖杯を得るでしょうが、現実は少し異なっていました...
ツールキット
- テストマシン:Core I7、SSD、12GBのRAM(以前の雇用主から提供されたもの)
- 負荷テスト:k6.io(ところで、フレームワークはそのアーキテクチャにおいて非常に興味深いです)
アプリケーションコードの構成
ソースコード
その後、特に気にしないことに決め、Habréで一度読んだ推奨事項に従うことにしました。 特に:
- ランダムデータを生成するジョブとしてペイロードを追加しました(結果の潜在的なキャッシュを排除するためのランダムデータ)
class Human { constructor (id, name, surname, age, gender) { this.id = id this.name = name this.surname = surname this.age = age this.gender = gender } }
- DartとNode.jsは両方とも、同期および非同期のリクエスト処理オプションを使用していました。
- 業界のフレームワーク(node.jsのdartとexpressの水道橋)にネイティブソリューションとソリューションを適用しました
- この研究では、各コアで分離を実行する水道橋を使用すると、Dartの大幅な加速が得られたため、node.jsのクラスターモジュールを使用してバランスを取りました。
テスト方法
- 1秒あたりのリクエスト数(500、750)およびテストの反復回数(完了したリクエストの数)の制限で負荷テストを実行する
- アプリケーションとテストフレームワークの両方が同じマシンで実行されたため、すべての結果は相対的であり、相互にしか比較できないことを理解する必要があります。
結果
ネイティブダーツ
500 rps

750 rps
Dartの水道橋フレームワーク
500 rps

750 rps

ネイティブnode.js
500 rps

750 rps

クラスターを使用したNode Express
500 rps

750 rps

結論
- もちろん、アプリケーションロジックをどのように実装したかに大きく依存します。dartとnode.jsの両方の場合に、自分のコードが最適であるかどうかはよくわかりません。
- 特に、配列を生成する機能は、非同期出力を備えた別のワーカーストリームに表示できます。私の場合は実装されていなかったため、ここでは非同期mosh全体は使用されませんでした。
- DartとNode.jsの両方で、出力はストリームを通じて整理できます
- したがって、パフォーマンスの調査と最適化の両方を行う余地はまだ多くあります。
- ハンドラーのネイティブ実装のDartは壮大なファイルを示しましたが、フレームワークを介して実装した場合、Dart仮想マシンがNode.jsと競合できるという印象的な結果を示しました
- 私の知る限り、V8の最適化には膨大な工数が費やされていますが、Dart仮想マシンに費やされる時間ははるかに少ないと確信しています。 したがって、2番目のものはおそらくV8より前の最適化の可能性が十分に大きい可能性があります。