DUICUO

最も高速なオープンソース Web フレームワークはどれでしょうか? 答えは GitHub で見つかりました。

[[422513]]

この記事は、HelloGitHubが執筆したWeChat公式アカウント「HelloGitHub」からの転載です。転載の許可については、HelloGitHub公式アカウントまでお問い合わせください。

オープンソースの世界では、数え切れないほどのオープンソースのウェブフレームワークが生まれています。GitHubで「ウェブフレームワーク」を検索すると、56,000件以上のオープンソースプロジェクトが見つかります。それぞれ独自の機能を持ち、複数の言語をカバーしています。

Web開発経験のあるプログラマーなら、おそらく複数のWebフレームワークを挙げ、その利点をすぐに説明できるでしょう。例えば、私が使用したPython Webフレームワークには、Django、Tornado、Flask、FastAPIなどがあります。これらのフレームワークはそれぞれ独自の機能を持っています。

  • Djangoの包括性
  • Flaskの小さな学習曲線
  • 専用のAPI開発ツールであるFastAPI

様々なWebフレームワークは、様々なシナリオやニーズに対応する際にそれぞれ長所と短所を持っているため、どれが最高かを判断するのは困難です。しかし、速度という観点から比較すれば、勝者は必ず見つかります!本日ご紹介するオープンソースプロジェクトは、最速のオープンソースWebフレームワークを見つけることを目指しています。

プロジェクトアドレス: https://github.com/the-benchmarker/web-frameworks

導入

web-frameworks は、さまざまなオープンソース Web フレームワークのパフォーマンス テスト レポートを定期的に公開し、どれが最も高速であるかを教えてくれるプロジェクトです。

Rubyで記述されており、まずDocker経由でテスト対象のWebフレームワークを起動し、次にwrk負荷テストサービスを使用し、最後にテストレポートをウェブサイトに公開します。結果は検索機能と並べ替え機能をサポートしており、プロセス全体が完全に自動化されています。

具体的なテストパラメータとマシン構成:

wrk: 負荷テストをサポートし、テスト レポートを出力する HTTP ベンチマーク ツール。

wrkのパラメータは、スレッド数8(-t)、読み込み時間15秒(-d)で、同時実行モード(-c)でそれぞれ64、256、512スレッドの3つの負荷テストを実行しました。レポートの関連データを示すため、ローカルマシンでwrkを使用してJuejinウェブサイトで負荷テストを実行しました。

  1. コマンド: wrk -t8 -d15s -c64 --latency https://juejin.cn  

結果と用語集:

マシン構成:

  • CPU: 8コア(AMD FX-8320E 8コアプロセッサ)
  • メモリ: 16 GB
  • OS: Linux

プロジェクトで行われたすべてのテストは、同一構成のマシンを使用して実施され、関連コードはすべてオープンソースです。私たちは公平性、公正性、そして完全な透明性の確保に努めて​​います。テスト結果は、Webフレームワークのリリースに合わせて更新されます。

Web フレームワークの最新のテスト レポートを見てみましょう。

最速のフレームワーク

Web フレームワークによって測定された平均レイテンシ (低い順から高い順に並べられています)。

1. ニッケル

星の数: 2.9k | 言語: Rust

https://github.com/nickel-org/nickel.rs

Express.js にインスパイアされた Rust ウェブフレームワーク。サンプルコード:

  1. #[macro_use] extern crate nickel;
  2.  
  3. nickel::{Nickel, HttpRouter} を使用します。
  4.  
  5. fn main() {
  6. mut server = Nickel::new(); とします。
  7. server.get( "**" 、ミドルウェア!( "Hello World" ));
  8. server.listen( "127.0.0.1:6767" );
  9. }

2.鉄

星の数: 5.9k | 言語: Rust

https://github.com/iron/iron

コード例:

  1. 外部木箱鉄;
  2. extern クレート時間;
  3.  
  4. iron::prelude::* を使用します。
  5. iron::{typemap, AfterMiddleware, BeforeMiddleware} を使用します。
  6. time ::precise_time_ns を使用します。
  7.  
  8. 構造体 ResponseTime;
  9.  
  10. typemap:: Keyの実装  ResponseTimeの場合{type Value = u64;}
  11.  
  12. ResponseTimeBeforeMiddleware の実装{
  13. fn before(&self, req: &mut Request) -> IronResult<()> {
  14. req.extensions.insert ::<ResponseTime>(precise_time_ns());
  15. わかりました(())
  16. }
  17. }
  18.  
  19. ResponseTime用のAfterMiddleware の実装{
  20. fn after (&self, req: &mut Request, res: Response) -> IronResult<Response> {
  21. delta = precise_time_ns() - *req.extensions.get::<ResponseTime>().unwrap() とします。
  22. println!( "リクエストにかかった時間: {} ミリ秒" 、 (delta as f64) / 1000000.0);
  23. 了解しました
  24. }
  25. }
  26.  
  27. fn hello_world(_: &mut リクエスト) -> IronResult<レスポンス> {
  28. Ok(Response:: with ((iron::StatusCode::OK, "Hello World" )))
  29. }
  30.  
  31. fn main() {
  32. mut チェーンを Chain::new(hello_world);
  33. chain.link_before(応答時間);
  34. chain.link_after(応答時間);
  35. Iron::new(chain).http( "localhost:3000" );
  36. }

スペースの制限により、このセクションではレポートの上位 2 つのフレームワークのみを紹介します。

最も耐久性のあるフレーム

Web フレームワークによって測定された 1 秒あたりに処理されるリクエストの平均数 (高い順から低い順に並べられています)。

1. アクティブJ

星の数: 286 | 言語: Java

https://github.com/activej/activej

Web、高負荷、マイクロサービスアプリケーションに適したJavaフレームワーク。サンプルコード:

  1. クラスMainはHttpServerLauncherを拡張します{
  2. @提供
  3. AsyncServlet サーブレット() {
  4. リクエストを返す-> HttpResponse.ok200()
  5. .withPlainText( "Hello World" );
  6. }
  7.    
  8. 公共  static void main(String[] args) 例外をスローします {
  9. ランチャー launcher = new HttpHelloWorldExample();
  10. ランチャー.launch(引数);
  11. }
  12. }

2. httpbeast

星の数: 239 | 言語: Nim

https://github.com/dom96/httpbeast

コード例:

  1. インポートオプション、asyncdispatch
  2.  
  3. httpbeastをインポートする
  4.  
  5. proc onRequest(req: Request): Future[void] =
  6. req.httpMethod == some (HttpGet) の場合:
  7. ケースreq.path.get()
  8.   「/」
  9. req.send( "Hello World" )
  10. それ以外
  11. 要求を送信(Http404)
  12.  
  13. 実行(onRequest)

スペースの制限により、このセクションではレポートの上位 2 つのフレームワークのみを紹介します。

フィーリング

この Web フレームワーク テスト レポートを確認した後、Rust で記述された Web フレームワークが、さまざまなパフォーマンス メトリック テストで一貫してトップ パフォーマーとしてランク付けされ、Rust がパフォーマンスに関してその評判に本当に応えていることが証明されました。

もちろん、パフォーマンスだけがWebフレームワークを選ぶ基準ではありません。本日このプロジェクトを執筆した目的は、Webフレームワークを選ぶ際に皆様の参考となる情報を提供することです。さらに、このレポートには、あまり知られていないものの、個性的なWebフレームワークもいくつか掲載されており、おもちゃのプロジェクトとして気軽に試してみることができます。もしこれらのフレームワークがいつか人気になったとしても、あなたは既に先行して使いこなせるようになっているかもしれません。

最終的に、Webフレームワークのテスト結果には合計237個のWebフレームワークが含まれていました。これは大きな数ではありませんが、その数は依然として増加傾向にあります。さらに、多くのWebフレームワークが問題解決への「参戦」を表明しています。オープンソースコミュニティの力によって、このプロジェクトはますます発展しており、その様子を見て安心しました。

この記事はこれで終わりです。このオープンソースプロジェクトが、パフォーマンス上の優位性をもたらす、最も高速で堅牢なWebフレームワークを見つける一助となることを願っています。