Saltar al contenido

Benchmarks

Los benchmarks independientes de TechEmpower muestran que las aplicaciones FastAPI ejecutándose bajo Uvicorn son uno de los frameworks de Python más rápidos disponibles, solo por debajo de Starlette y Uvicorn mismos (usados internamente por FastAPI).

Pero al revisar los benchmarks y las comparaciones debes tener en cuenta lo siguiente.

Benchmarks y velocidad

Cuando revisas los benchmarks, es común ver varias herramientas de diferentes tipos comparadas como equivalentes.

Específicamente, ver Uvicorn, Starlette y FastAPI comparados juntos (entre muchas otras herramientas).

Cuanto más simple sea el problema resuelto por la herramienta, mejor rendimiento obtendrá. Y la mayoría de los benchmarks no prueban las características adicionales proporcionadas por la herramienta.

La jerarquía es así:

  • Uvicorn: un servidor ASGI

    • Starlette: (uses Uvicorn) a web microframework
      • FastAPI: (usa Starlette) un microframework de API con varias características adicionales para construir APIs, con validación de datos, etc.
  • Uvicorn:

    • Tendrá el mejor rendimiento, ya que no tiene mucho código extra aparte del servidor mismo.
    • No escribirías una aplicación en Uvicorn directamente. Eso significaría que tu código tendría que incluir más o menos, al menos, todo el código proporcionado por Starlette (o FastAPI). Y si lo hicieras, tu aplicación final tendría el mismo overhead que si hubieras usado un framework y minimizando el código y los bugs de tu app.
    • Si estás comparando Uvicorn, compáralo contra Daphne, Hypercorn, uWSGI, etc. Servidores de aplicaciones.
  • Starlette:
    • Tendrá el siguiente mejor rendimiento, después de Uvicorn. De hecho, Starlette usa Uvicorn para ejecutarse. Así que, probablemente solo puede ser "más lento" que Uvicorn al tener que ejecutar más código.
    • Pero te proporciona las herramientas para construir aplicaciones web simples, con enrutamiento basado en paths, etc.
    • Si estás comparando Starlette, compáralo contra Sanic, Flask, Django, etc. Frameworks web (o microframeworks).
  • FastAPI:
    • De la misma manera que Starlette usa Uvicorn y no puede ser más rápido que este, FastAPI usa Starlette, así que no puede ser más rápido que este.
    • FastAPI proporciona más características encima de Starlette. Características que casi siempre necesitas al construir APIs, como validación y serialización de datos. Y al usarlo, obtienes documentación automática gratis (la documentación automática ni siquiera añade overhead a las aplicaciones en ejecución, se genera al iniciar).
    • Si no usaras FastAPI y usaras Starlette directamente (u otra herramienta, como Sanic, Flask, Responder, etc.) tendrías que implementar toda la validación y serialización de datos tú mismo. Así que, tu aplicación final tendría el mismo overhead que si estuviera construida usando FastAPI. Y en muchos casos, esta validación y serialización de datos es la mayor cantidad de código escrito en las aplicaciones.
    • Así que, al usar FastAPI estás ahorrando tiempo de desarrollo, bugs, líneas de código, y probablemente obtendrías el mismo rendimiento (o mejor) que si no lo usaras (ya que tendrías que implementarlo todo en tu código).
    • Si estás comparando FastAPI, compáralo contra un framework de aplicaciones web (o conjunto de herramientas) que proporcione validación de datos, serialización y documentación, como Flask-apispec, NestJS, Molten, etc. Frameworks con validación automática de datos integrada, serialización y documentación.