TinyHTTP対Expressノードの比較.JSフレームワーク

17676 ワード

執筆Shubham Kumar ✏️
このガイドでは、ノードでWebアプリケーションを構築するための最も一般的に使用されるフレームワークのいずれかを比較します.JSエクスプレス.JS、TinyHTTP、その最も人気のある選択肢の一つ.
我々がカバーするものは、ここにあります:
  • What is tinyhttp?
  • What is Express.js?
  • tinyhttp vs. Express.js: A basic comparison
  • Performance benchmark
  • tinyhttp and Express.js in action: A simple example
  • ThinyHTTPとは


    tinyhttp 最新のWebフレームワークは、Expressに似ています.タイプスクリプトで書かれたjs.これは依存性の非常に最小限の量を使用して表現に比較します.それは超高速になります.
    TinyHTTPルーティング、REQ/RESの拡張機能、およびはるかに、すべての中にのみ6つのモジュールに応じて- 4つのTinyHTTP独自のものです.
    すべてのミドルウェアは、表現のために作成されました.jsはスムーズにtinyHTTPで動作します.チェックアウトtinyhttp + Express/GraphQL Expressを使用する方法の例の統合.JSミドルウェア.
    TinyHTTPもAsyncをサポートしています/急行ではないルートのための待機.jsTinyHTTPの中には適切な型と関数チェッカーがあります.つまり、syncとasyncはtinyHTTPでうまく動作します.チェックアウトasync and MongoDB 例: asyncハンドラの作成方法を参照してください.
    TinyHTTPの最も重要な特徴の短いリストですofficial docs :
  • エクスプレスより2.5倍速い
  • フルエクスプレスミドルウェアサポート
  • ( Asyncミドルウェアのサポート)
  • ネイティブESMとCommonJSのサポート
  • レガシー依存性はなく、JavaScript自体
  • ボックスからのタイプ
  • いいえ内蔵ミドルウェアのサポート
  • エクスプレスとはJS ?


    Express.js は柔軟なノードです.Webおよびモバイルアプリケーションの機能の堅牢なセットを提供するJSフレームワーク.強健なAPIを作成することは非常に簡単です.JSは多くのミドルウェアと他のビルトインサポートで来ます.
    エクスプレス.JSはデータベースが付属していませんこれは、サードパーティ製のモジュールは、ほぼすべてのデータベースとのインターフェイスをすることができます残っている.エクスプレス.jsサポートtemplate engines それで(path, locals, callback) 署名.
    このフレームワークは、それが最小限で柔軟なノードとして機能するような方法で構築されます.JS Webアプリケーションフレームワーク、単一、マルチページ、およびハイブリッドWebアプリケーションを構築するための機能の堅牢なセットを提供する.
    急行の特徴js
  • オープンソースコミュニティサポート
  • 高速アプリ開発
  • 簡単に学ぶ
  • テンプレートエンジンサポート
  • I/O処理
  • 内蔵ミドルウェアサポート
  • TinyHTTP対Express基本的な比較


    TinyHTTPとExpress V 4のハイレベル比較のために、最小ノードを見ましょう.JSバージョン、ECMAScriptバージョン、テストカバレッジなど
    基準
    tinyHTTP
    エクスプレスV 4
    最小サポートノード.JSバージョン
    12.4.0
    0.10.0
    ミニマムサポート
    ES 2019
    ES 5 (?)req / res 拡張
    ✔️
    ✔️
    試験範囲
    92 %
    100 %
    ネイティブESMにコンパイル
    ✔️
    ✖️
    タイプスクリプトのサポート
    ✔️
    ✖️
    パッケージサイズ( core only )
    35.2 KB
    208 KB
    内蔵ミドルウェア
    ✖️
    ✔️
    上の表のメモ
  • 最小ノード.TinyHTTPが動作するために必要なJSバージョンは12.4.0ですが、Express V 4では、ノードでも作業を開始できます.js 0.10.0
  • tinyHTTPのための最小限のサポートされているバージョンはES 2019(ES 10)です、しかし、Express V 4で、我々はES 5を必要とします
  • req イベントを発生させたHTTPリクエストに関する情報を含むオブジェクトです.応えてreq , お使いくださいres を返します.TinyHTTPとExpress V 4サポートreq/res 拡張
  • CodebaseのためのテストカバレッジはTinyHTTPのための92パーセントと急行のための100パーセントです.JS V 4
  • ES 6(またはES 2015)NORMで導入されたESM(ECMAScriptモジュール)仕様は、JavaScriptでモジュールをインポートして、エクスポートする方法を説明します.私たちはTinyHTTPでESMをネイティブに使用することができますが、外部サポートも必要ですBabel , 急行.js
  • 急行と違って.JS , TinyHTTPはTypescriptサポートを備えています
  • tinyHTTPのコアパッケージサイズは35.0 KBです.js
  • TinyHTTPは内蔵ミドルウェアが付属していません.エクスプレス.JSにはbuilt-in middleware
  • パフォーマンスベンチマーク


    基本的な方法で、パフォーマンスレポートを見てみましょうfastify benchmarking tool . ここではパラメータをreq/s,転送/s,遅延を用いてフレームワークの性能を測定した.
    以下は、このベンチマークに使用されるハードウェア、システム、および条件に関するいくつかの注意事項です.
  • ハードウェア
  • Xiaomi Pro 2019版(ラップトップ)
  • インテル・コア
  • RAM : 16 GB
  • システム
  • カーネル5.5.19 - 2
  • ノード15.5
  • 条件
  • 100接続
  • 10パイプライン
  • 40 s持続時間
  • フレームワーク
    レーク/秒
    転送/秒
    潜時
    @ tinyHTTP/app ( w/o exts )
    24575
    3.81 MB
    3.37 ms
    @ tinyHTTP/app ( ESM )
    22820
    3.54 MB
    4.04 ms
    @ tinyHTTP/app ( CJS )
    22637年
    3.51 MB
    4.08 ms
    エクスプレス4.17.1
    12986年
    2 MB
    7.11 msreq/s 秒あたりのリクエスト数です.Latency ユーザの行動と、そのアプリケーションに対するWebアプリケーションの応答の間の遅延を参照します.
    上の表から、TinyHTTPはExpressよりも低いレイテンシで1秒あたりの転送を行うことができます.JS V 4
    注:ベンチマークは完全に正確ではなく、すべての実行とすべてのマシンで異なるかもしれません.キーは絶対値の代わりに割合を比較することです.
    パフォーマンスベンチマークを終了するには、tinyHTTPreq/res Expressは~ Expressより1.9倍速い.js

    TinyHTTPとExpress。JSインアクション:簡単な例


    今すぐTinyHTTPとExpressを見ることができるので、単純な例のアプリを構築する時間です.側のアクション側のJS.
    任意のパッケージマネージャを使用してtinyHTTPとExpressをインストールできます.私は使用するnpm デモ.
    TinyHTTPをインストールするには、次の手順に従います.
    npm i @tinyhttp/app
    
    Expressをインストールするにはjs
    npm install express
    

    ハローワールド


    エクスプレス.JSとTinyHTTPアプリは非常に同様に構造化されます.あなたが急行を知っているならば.それから、あなたはTinyHTTPも知っています.
    tinyHTTP :
    import { App } from '@tinyhttp/app'
    const app = new App()
    const PORT = 3000
    
    app
      .get('/', (_, res) => void res.send('<h1>Hello World</h1>'))
      .listen(PORT, () => console.log(`Started on http://localhost:${PORT}!`))
    
    エクスプレス.js
    const express = require('express');
    const app = express();
    
    app.get('/', (req, res) => {
      res.send('Hello world');
    });
    
    app.listen(3000, () => console.log('listening on port 3000'));
    
    あなたはおそらくrequire , ESM輸入を使用しました.TinyHTTPを使用するように設計されてNative ESM . Expressとは異なり、tinyHTTPはESMとCommonJSモジュールシステムの両方にコンパイルされます.一方、どうにか、それは表現よりはるかに小さいです.js
    使えますimport/export ノードの構文.それによるJS.ノードESMパッケージを設定するには"type": "module"package.json ファイル:
    {
      "type": "module"
    }
    
    もう一つのオプションは.mjs 拡張.そのように、あなたはそれを置く必要はありません"type" フィールドpackage.json . 詳細については、チェックアウトECMAScript Modules Node.js documentation .
    一番人気があるので.JSミドルウェアも時代遅れのモジュールを使用します、tinyHTTPはそのような人気のウェアのその書き直し/リメイクのセットを提供しますlogger , session , など.

    ルーティング


    では、どのようにTinyHTTPとExpressの基本的なルーティングを処理するかを見ましょう.jsエクスプレス.多くのヘルパー機能が含まれていますreq and res オブジェクト.TinyHTTP完全にエクスプレスを実装します.などのメソッドを使用してres.send , res.download , res.redirect , など.
    tinyHTTP :
    import { App } from '@tinyhttp/app'
    import { once } from 'events'
    
    const app = new App()
    const PORT = 3000
    
    app.get('/', (req, res) => {
        res.send('Sent a GET!')
    })
    
    app.post('/', async (req, res) => {
        // Nothing complex here, we just listen to 'data' event and return the data as a promise to a `data` variable
        const data = await once(req, 'data').then(d => d.toString())
    
        // And then we send it
        res.end(`Sent some data: ${data}`)
    })
    
    app.listen(PORT, () => console.log(`Started on http://localhost:${PORT}!`))
    
    エクスプレス.js
    var express = require('express');
    var app = express();
    
    app.get('/', function(req, res){
       res.send("Send a GET!");
    });
    
    app.post('/', function(req, res){
       res.send("hello'!\n");
    });
    
    app.listen(3000);
    

    結論


    TinyHTTPは高速で、光であり、バックエンドのアプリケーションのために今日それを使用して起動することができます.The tinyhttp repository 含んでいるexamples , 含むMongoDB and GraphQL 統合.私はすぐに最低限のコードを開始する必要があるTinyHTTPを使用することをお勧めします.
    と言った.JSはまだ人気があり、オープンソースのコミュニティサポートと簡単な学習曲線のために主要なプロジェクトや産業で使用され続けます.

    200年代のみ✔️ モニタに失敗し、ネットワーク要求を遅くする


    ノードベースのWebアプリケーションやウェブサイトの展開は簡単です.あなたのノードのインスタンスがあなたのアプリケーションにリソースを提供し続けていることを確認することは物事がより厳しい取得です.あなたがバックエンドまたはサードパーティサービスへの要求を確実にすることに興味があるならば、成功してください.try LogRocket .

    LogRocket ウェブアプリのDVRのように、あなたのサイトで起こる文字通りのすべてを記録してください.問題が起こる理由を推測する代わりに、あなたは根本的な原因を理解するために問題のネットワーク要求に関して集計して、報告することができます.
    ページのロード時間などのベースラインのパフォーマンスのタイミング、最初のバイト、低速ネットワークのリクエストにログを記録するためにあなたのアプリケーションをログ出力器、およびまた、RUDX、NGRX、およびVUEXのアクション/状態を記録します.Start monitoring for free .