-
-
Notifications
You must be signed in to change notification settings - Fork 6.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Portuguese translation for docs/pt/docs/advanced/benchmarks.md
- Loading branch information
Rafael Marques
committed
Jun 12, 2024
1 parent
57c8490
commit 67682f7
Showing
1 changed file
with
34 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# Benchmarks | ||
|
||
Benchmarks independentes da TechEmpower mostra que aplicações **FastAPI** rodando com o Uvicorn como <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">um dos frameworks Python mais rápidos disponíveis</a>, ficando atrás apenas do Starlette e Uvicorn (utilizado internamente pelo FastAPI). | ||
|
||
Porém, ao verificar benchmarks e comparações você deve prestar atenção ao seguinte. | ||
|
||
## Benchmarks e velocidade | ||
|
||
Quando você verifica os benchmarks, é comum ver diversas ferramentas de diferentes tipos comparados como se fossem equivalentes. | ||
|
||
Especificamente, para ver o Uvicorn, Starlette e FastAPI comparados entre si (entre diversas outras ferramentas). | ||
|
||
Quanto mais simples o problema resolvido pela ferramenta, melhor será a performance. E a maioria das análises não realiza testes das funcionalidades adicionais que são oferecidas pela ferramenta. | ||
|
||
A hierarquia é: | ||
|
||
* **Uvicorn**: um servidor ASGI | ||
* **Starlette**: (utiliza Uvicorn) um microframework web | ||
* **FastAPI**: (utiliza Starlette) um microframework para APIs com diversas funcionalidades adicionais para a construção de APIs, com validação de dados, etc. | ||
|
||
* **Uvicorn**: | ||
* Terá a melhor performance, pois não possui muito código além do próprio servidor. | ||
* Você não escreveria uma aplicação utilizando o Uvicorn diretamente. Isso significaria que o seu código teria que incluir pelo menos todo o código fornecido pelo Starlette (ou o **FastAPI**). E caso você fizesse isso, a sua aplicação final teria a mesma sobrecarga que teria caso estivesse utilizado um framework e minimizando o código e os bugs. | ||
* Se você está comparando o Uvicorn, compare com os servidores de aplicação Daphne, Hypercorn, uWSGI, etc. | ||
* **Starlette**: | ||
* Terá o melhor desempenho, depois do Uvicorn. Na verdade, o Starlette utiliza o Uvicorn para rodar. Portanto, ele pode ficar mais "devagar" que o Uvicorn apenas por ter que executar mais código. | ||
* Mas ele fornece as ferramentas para construir aplicações web simples, com roteamento baseado em caminhos, etc. | ||
* Se você está comparando o Starlette, compare-o com o Sanic, Flask, Django, etc. Frameworks web (ou microframeworks). | ||
* **FastAPI**: | ||
* Da mesma forma que o Starlette utiliza o Uvicorn e não consegue ser mais rápido que ele, o **FastAPI** utiliza o Starlette, portanto, ele não consegue ser mais rápido que ele. | ||
* O FastAPI provê mais funcionalidades em cima do Starlette. Funcionalidades que você quase sempre precisará quando estiver construindo APIs, como validação de dados e serialização. E ao utilizá-lo, você obtém documentação automática sem custo nenhum (a documentação automática sequer adiciona sobrecarga nas aplicações rodando, pois ela é gerada na inicialização). | ||
* Caso você não utilize o FastAPI e faz uso do Starlette diretamente (ou outra ferramenta, como o Sanic, Flask, Responder, etc) você mesmo teria que implementar toda a validação de dados e serialização. Então, a sua aplicação final ainda teria a mesma sobrecarga caso estivesse usando o FastAPI. E em muitos casos, validação de dados e serialização é a maior parte do código escrito em aplicações. | ||
* Então, ao utilizar o FastAPI você está economizando tempo de programação, bugs, linhas de código, e você provavelmente terá a mesma performance (ou até melhor) que você teria caso você não o utilizasse (já que você teria que implementar tudo no seu código). | ||
* Se você está comparando o FastAPI, compare-o com frameworks de aplicações web (ou conjunto de ferramentas) que oferecem validação de dados, serialização e documentação, como por exemplo o Flask-apispec, NestJS, Molten, etc. Frameworks que possuem validação integrada de dados, serialização e documentação. |