blog

DenoとNode.NETの性能比較から始める。

今年5月、Denoはバージョン1.0をリリースしました。プロジェクトをビルドするのにNodeをよく使うフロントエンドとして、私は公式サイトで説明されているDenoの利点にはあまり関心がありません。主に...

Dec 18, 2020 · 4 min. read
シェア

今年5月、Denoは、プロジェクトのフロントエンドを構築するためにNodeの頻繁な使用として、バージョン1.0をリリースし、Denoの公式ウェブサイトは、それらの利点は、実際にはあまり気にしない説明しています。主にどのようにDenoのパフォーマンスを知りたい、Denoで大幅にフロントエンドのビルドプロジェクト時間のかかる減らすことができます。ネットワーク上でDenoは、Nodeの議論もより興味を持って置き換えることができますので、彼らはいくつかの一般的なメソッドを実行するためにDenoとNodeを使用し、それらのパフォーマンスを比較し、DenoはNodeを置き換えることができるかどうかを研究します。

Deno

DenoはJavaScriptとTypeScriptのランタイムで、NodeやJavaと同じようにサーバー上で実行できます。

テスト情報

Node version v14.6.0 (v8-8.4.371.19)、Deno version 1.1.0 (v8-8.4.300)。

実行結果は、同じメソッドを5回実行することで範囲を取得しました。

サードパーティライブラリはspark-md5、js-base64、acorn、estraverse、escodegenを使用。

sort による配列の並べ替え

console.time("sort-array");
dataArray.sort((a, b) => {
 return a - b;
});
console.timeEnd("sort-array");

ノード:84.645ms~103.086ms

デノ:134ms~140ms

md5(ファイルサイズ2.6M)

console.time('md5');
spark.append(data);
console.log('md5:\x20' + spark.end());
console.timeEnd('md5');

ノード 33.559ms-41.608ms

デノ 63ms-83ms

base64 (ファイルサイズ 2.6M)

console.time('Base64');
Base64.encode(data);
console.timeEnd('Base64');

ノード 572.197ms-662.004ms

デノ 1216ms-1269ms

フィボナッチ数列

function a(obj) {
    if (obj === 0x0) {
        return 0x0;
    } else if (obj === 0x1) {
        return 0x1;
    } else {
        return a(obj - 0x1) + a(obj - 0x2);
    }
}
console.time('fib');
a(0x28);
console.timeEnd('fib');

ノード 1.286s-1.343s

デノ 1447ms-1616ms

for in はオブジェクトを走査します。

console.time('for\x20in');
for (let a in dataObject) {
    total += dataObject[a].list[0x0].n;
}
console.timeEnd('for\x20in');

ノード 49.773ms-65.803ms

デノ 41ms-49ms

JSON

console.time('JSON');
let c = JSON.parse(JSON.stringify(dataObject));
console.timeEnd('JSON');

ノード 345.198ms-376.225ms

デノ 173ms-192ms

カスタムローダー(約202ファイル生成)

上記のテストコードはすべてKokoあり、テスト結果は異なるはずですが、違いの大きさは正確なはずです。ご自分のコンピューターで試してみてください。

パフォーマンス比較分析

上記のデータから、配列のソート、オブジェクトのトラバーサル、再帰的な関数呼び出し、md5計算、およびbase64エンコーディングのテストではNodeの方が優れており、JSONシリアライゼーションとカスタムローダーのテストではDenoの方が優れていることがわかります。

webpackでパッケージ化した場合、カスタムローダーのテストウェイトが他の項目よりも高くなるはずなので、Denoでパッケージ化した場合でも、データ上は20%程度まで一定の改善が見込めるはずです。もちろん、この結論は正確ではありません、実際のwebpackの処理の開発はまだより複雑であり、本当の正確な比較はまだWebpackを実装するためにDenoを使用することです。例えば、RollupとParcelはどちらもパッケージング効率がwebpackよりはるかに高いと宣伝していましたが、今ではビルドツールのリーダーとしてのwebpackの地位を揺るがすことはできません。

そのため、先行者の優位性は依然として非常に重要です。現在、NodeのサーバーサイドフレームワークにはExpressがあり、ビルドツールにはwebpackがあり、デスクトップアプリケーションにはelectronがあります。そして、Denoの公式ウェブサイトのドキュメントから、Nodeではなく、Pythonのシナリオの一部を置き換えることがわかります。

Deno経験

まず、Denoはtypescriptファイルを直接実行できるので、最初にtscでコンパイルする必要がありません。関数のデフォルトがプロミスを返すので、直接awaitを使うことができます。インポート()やウェブワーカーをサポートしているので、ブラウジングの経験者とかでも簡単に使い始めることができます。

全体的な使い心地はとても良く、Nodeに比べてビルドの手間が省けます。

しかし、Denoは現時点では成熟しておらず、いくつかのAPIはまだ不安定で、提供されているAPIは少なすぎます。また、osモジュールの一部のメソッドなど、実装できないものもあります。サードパーティモジュールも比較的少なく、現在786個しかありません。こちら確認できます。

ですから、Denoがバージョン1.0をリリースしたとはいえ、本番で使えるようになるにはまだ時間がかかりそうです。

まとめ

  1. リファクタリングのコストとエコロジーの強さを考慮すると、DenoのパフォーマンスはNodeを置き換えることは困難です。
  2. Denoも一部のユーザーを取り込むべきだし、Denoの良さに興味を持っている人はかなりいるし、Denoの学習コストはまだ比較的低い。
  3. Denoのエコシステムはまだ未成熟であり、システム方法論とサードパーティライブラリはまだ比較的小さいため、企業が本番環境でDenoを使用することは推奨されません。

帰属表示を伴う転載は十分可能です。

この記事は、一部のメソッドの速度を比較しているだけであり、2つの言語自体のパフォーマンスを表しているわけではありません。サーバーサイドのパフォーマンスについては、Denoのウェブサイトで比較結果をご覧ください。

deno.land/benchmarks

Read next

PowerShellラーニング - PowerShellを使い始める

ユーザーのアクセス制御を行う方法はありません。 ステータス情報を格納するための自動変数がいくつかあります。これらの変数の1つは$で、関連するバージョンを表示するために使用できるハッシュテーブルが含まれています。 Windows PowerS...

Dec 18, 2020 · 3 min read