コンテンツへスキップ

ベンチマーク

独立したTechEmpowerのベンチマークによると、Uvicornで動作するFastAPIアプリケーションは、StarletteとUvicorn自身(FastAPIが内部的に使用)に次いで、利用可能なPythonフレームワークの中で最も速いものの一つであることが示されています。

しかし、ベンチマークや比較を確認する際には、次の点を念頭に置く必要があります。

ベンチマークと速度

ベンチマークを確認すると、異なる種類のいくつかのツールが同等として比較されているのをよく見かけます。

具体的には、Uvicorn、Starlette、FastAPIが(他の多くのツールと並んで)比較されているのを見かけます。

ツールが解決する問題が単純であればあるほど、パフォーマンスは向上します。そして、ほとんどのベンチマークは、ツールが提供する追加機能をテストしていません。

階層は次のようになります。

  • Uvicorn: ASGIサーバー

    • Starlette: (Uvicornを使用) ウェブマイクロフレームワーク
      • FastAPI: (Starletteを使用) API構築のためのいくつかの追加機能(データ検証など)を備えたAPIマイクロフレームワーク
  • Uvicorn:

    • サーバー自体以外の余分なコードがほとんどないため、最高のパフォーマンスを発揮します。
    • Uvicornで直接アプリケーションを記述することはありません。それは、あなたのコードが多かれ少なかれ、少なくともStarlette(またはFastAPI)が提供するすべてのコードを含まなければならないことを意味します。もしそうすれば、最終的なアプリケーションは、フレームワークを使用し、アプリのコードとバグを最小限に抑えた場合と同じオーバーヘッドを持つことになります。
    • Uvicornを比較する場合は、Daphne、Hypercorn、uWSGIなどのアプリケーションサーバーと比較してください。
  • Starlette:
    • Uvicornに次いで、次に良いパフォーマンスを発揮します。実際、StarletteはUvicornを使用して実行されます。したがって、より多くのコードを実行する必要があるため、Uvicornよりも「遅く」なるだけでしょう。
    • しかし、パスベースのルーティングなどで、シンプルなウェブアプリケーションを構築するためのツールを提供します。
    • Starletteを比較する場合は、Sanic、Flask、Djangoなどのウェブフレームワーク(またはマイクロフレームワーク)と比較してください。
  • FastAPI:
    • StarletteがUvicornを使用し、それよりも速くならないのと同様に、FastAPIはStarletteを使用しているため、それよりも速くなることはありません。
    • FastAPIは、Starletteの上にさらに多くの機能を提供します。データ検証やシリアライズなど、APIを構築する際にほとんど常に必要となる機能です。そして、これを使用することで、自動ドキュメントを無料で手に入れることができます(自動ドキュメントは実行中のアプリケーションにオーバーヘッドを追加せず、起動時に生成されます)。
    • FastAPIを使用せず、Starletteを直接使用した場合(またはSanic、Flask、Responderなどの別のツール)、すべてのデータ検証とシリアライズを自分で実装しなければなりません。したがって、最終的なアプリケーションは、FastAPIを使用して構築された場合と同じオーバーヘッドを持つことになります。そして多くの場合、このデータ検証とシリアライズが、アプリケーションで書かれるコードの最大の割合を占めます。
    • したがって、FastAPIを使用することで、開発時間、バグ、コード行数を節約でき、使用しなかった場合(すべてのコードを自分で実装する必要があった場合)と同じ(またはより良い)パフォーマンスを得られるでしょう。
    • FastAPIを比較する場合は、Flask-apispec、NestJS、Moltenなど、データ検証、シリアライズ、ドキュメントを提供するウェブアプリケーションフレームワーク(またはツールセット)と比較してください。自動データ検証、シリアライズ、ドキュメントを統合したフレームワーク。