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