ベンチマーク¶
独立したTechEmpowerベンチマークによると、Uvicornで動作するFastAPIアプリケーションは、利用可能なPythonフレームワークの中で最も高速なものの1つであり、StarletteとUvicorn(FastAPIが内部で使用)に次ぐ速さです。
しかし、ベンチマークや比較を確認する際には、以下の点に留意する必要があります。
ベンチマークと速度¶
ベンチマークを確認すると、異なる種類のいくつかのツールが同等に比較されているのをよく見かけます。
具体的には、Uvicorn、Starlette、FastAPIが(他の多くのツールと並んで)一緒に比較されているのを見かけます。
ツールによって解決される問題が単純であるほど、パフォーマンスは向上します。そして、ほとんどのベンチマークは、ツールが提供する追加機能をテストしていません。
階層は以下の通りです
-
Uvicorn: ASGIサーバー
- Starlette: (Uvicornを使用) ウェブマイクロフレームワーク
- FastAPI: (Starletteを使用) APIを構築するためのいくつかの追加機能、データ検証などを含むAPIマイクロフレームワーク
- Starlette: (Uvicornを使用) ウェブマイクロフレームワーク
-
Uvicorn:
- サーバー自体以外の余分なコードがほとんどないため、最高のパフォーマンスを発揮します。
- Uvicornで直接アプリケーションを作成することはありません。それは、あなたのコードがStarlette(またはFastAPI)が提供するすべてのコードを多かれ少なかれ、少なくとも含める必要があることを意味します。そして、もしそうしたとしても、あなたの最終的なアプリケーションは、フレームワークを使用し、アプリのコードとバグを最小限に抑えた場合と同じオーバーヘッドを持つことになります。
- Uvicornを比較する場合は、Daphne、Hypercorn、uWSGIなどのアプリケーションサーバーと比較してください。
- Starlette:
- Uvicornの次に優れたパフォーマンスを発揮します。実際、StarletteはUvicornを使って動作します。そのため、より多くのコードを実行する必要があるため、Uvicornより「遅く」なる可能性があります。
- しかし、パスに基づいたルーティングなど、シンプルなウェブアプリケーションを構築するためのツールを提供します。
- Starletteを比較する場合は、Sanic、Flask、Djangoなどのウェブフレームワーク(またはマイクロフレームワーク)と比較してください。
- FastAPI:
- StarletteがUvicornを使用しているためUvicornより速くなることはないのと同様に、FastAPIはStarletteを使用しているためStarletteより速くなることはありません。
- FastAPIはStarletteの上にさらに多くの機能を提供します。データ検証やシリアライゼーションなど、APIを構築する際にほとんど常に必要となる機能です。そして、それを使用することで、自動ドキュメントを無料で手に入れることができます(自動ドキュメントは実行中のアプリケーションにオーバーヘッドを追加せず、起動時に生成されます)。
- もしFastAPIを使用せず、Starlette(またはSanic、Flask、Responderなどの別のツール)を直接使用した場合、すべてのデータ検証とシリアライゼーションを自分で実装しなければなりません。そのため、あなたの最終的なアプリケーションは、FastAPIを使用して構築された場合と同じオーバーヘッドを持つことになります。そして多くの場合、このデータ検証とシリアライゼーションが、アプリケーションで書かれるコードの最大の量を占めます。
- したがって、FastAPIを使用することで、開発時間、バグ、コード行数を節約でき、使用しなかった場合(すべてのコードを自分で実装する必要があるため)と同じかそれ以上のパフォーマンスを得られるでしょう。
- FastAPIを比較する場合は、Flask-apispec、NestJS、Moltenなど、データ検証、シリアライゼーション、ドキュメントを提供するWebアプリケーションフレームワーク(またはツールセット)と比較してください。自動データ検証、シリアライゼーション、ドキュメントが統合されたフレームワークです。