committed by
GitHub
2 changed files with 39 additions and 22 deletions
@ -1,37 +1,36 @@ |
|||
# Замеры производительности |
|||
# Бенчмарки |
|||
|
|||
Независимые тесты производительности приложений от TechEmpower показывают, что **FastAPI** под управлением Uvicorn <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">один из самых быстрых Python-фреймворков</a> и уступает только Starlette и Uvicorn (которые используются в FastAPI). (*) |
|||
Независимые бенчмарки (тесты производительности) от TechEmpower показывают, что приложения **FastAPI**, работающие под Uvicorn, <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">являются одними из самых быстрых Python-фреймворков</a>, уступающие только самим Starlette и Uvicorn (которые используются внутренне в FastAPI). |
|||
|
|||
Но при просмотре и сравнении замеров производительности следует иметь в виду нижеописанное. |
|||
Но при просмотре бенчмарков и сравнений следует учитывать следующее. |
|||
|
|||
## Замеры производительности и скорости |
|||
## Бенчмарки и скорость |
|||
|
|||
В подобных тестах часто можно увидеть, что инструменты разного типа сравнивают друг с другом, как аналогичные. |
|||
Когда вы просматриваете бенчмарки, часто можно увидеть, как сравниваются несколько инструментов разных типов как эквивалентные. |
|||
|
|||
В частности, сравнивают вместе Uvicorn, Starlette и FastAPI (среди многих других инструментов). |
|||
В частности, часто сравнивают вместе Uvicorn, Starlette и FastAPI (среди многих других инструментов). |
|||
|
|||
Чем проще проблема, которую решает инструмент, тем выше его производительность. И большинство тестов не проверяют дополнительные функции, предоставляемые инструментом. |
|||
Чем проще проблема, которую решает инструмент, тем лучше будет его производительность. И большинство бенчмарков не тестируют дополнительные функции, предоставляемые инструментом. |
|||
|
|||
Иерархия инструментов имеет следующий вид: |
|||
Иерархия выглядит следующим образом: |
|||
|
|||
* **Uvicorn**: ASGI-сервер |
|||
* **Starlette** (использует Uvicorn): веб-микрофреймворк |
|||
* **FastAPI** (использует Starlette): API-микрофреймворк с дополнительными функциями для создания API, с валидацией данных и т.д. |
|||
* **Starlette**: (использует Uvicorn) веб-микрофреймворк |
|||
* **FastAPI**: (использует Starlette) API-микрофреймворк с несколькими дополнительными возможностями для создания API, включая валидацию данных и т.д. |
|||
|
|||
* **Uvicorn**: |
|||
* Будет иметь наилучшую производительность, так как не имеет большого количества дополнительного кода, кроме самого сервера. |
|||
* Вы не будете писать приложение на Uvicorn напрямую. Это означало бы, что Ваш код должен включать как минимум весь |
|||
код, предоставляемый Starlette (или **FastAPI**). И если Вы так сделаете, то в конечном итоге Ваше приложение будет иметь те же накладные расходы, что и при использовании фреймворка, минимизирующего код Вашего приложения и Ваши ошибки. |
|||
* Uvicorn подлежит сравнению с Daphne, Hypercorn, uWSGI и другими веб-серверами. |
|||
* Будет иметь наилучшую производительность, так как в нем нет большого количества дополнительного кода, кроме самого сервера. |
|||
* Вы не будете писать приложение непосредственно на Uvicorn. Это означало бы, что ваш код должен включать как минимум весь код, предоставляемый Starlette (или **FastAPI**). И если бы вы это сделали, ваше конечное приложение имело бы те же накладные расходы, как если бы вы использовали фреймворк, и минимизировало бы ваш код и ошибки. |
|||
* Если вы сравниваете Uvicorn, сравнивайте его с Daphne, Hypercorn, uWSGI и другими серверными приложениями. |
|||
|
|||
* **Starlette**: |
|||
* Будет уступать Uvicorn по производительности. Фактически Starlette управляется Uvicorn и из-за выполнения большего количества кода он не может быть быстрее, чем Uvicorn. |
|||
* Зато он предоставляет Вам инструменты для создания простых веб-приложений с обработкой маршрутов URL и т.д. |
|||
* Starlette следует сравнивать с Sanic, Flask, Django и другими веб-фреймворками (или микрофреймворками). |
|||
* Будет иметь следующую по производительности позицию после Uvicorn. Фактически, Starlette использует Uvicorn для выполнения. Таким образом, он может быть "медленнее" Uvicorn из-за выполнения большего количества кода. |
|||
* Но он предоставляет вам инструменты для создания простых веб-приложений с маршрутизацией на основе путей и т.д. |
|||
* Если вы сравниваете Starlette, сравнивайте его с Sanic, Flask, Django и другими веб-фреймворками (или микрофреймворками). |
|||
|
|||
* **FastAPI**: |
|||
* Так же как Starlette использует Uvicorn и не может быть быстрее него, **FastAPI** использует Starlette, то есть он не может быть быстрее Starlette. |
|||
* FastAPI предоставляет больше возможностей поверх Starlette, которые наверняка Вам понадобятся при создании API, такие как проверка данных и сериализация. В довесок Вы ещё и получаете автоматическую документацию (автоматическая документация даже не увеличивает накладные расходы при работе приложения, так как она создается при запуске). |
|||
* Если Вы не используете FastAPI, а используете Starlette напрямую (или другой инструмент вроде Sanic, Flask, Responder и т.д.), Вам пришлось бы самостоятельно реализовать валидацию и сериализацию данных. То есть, в итоге, Ваше приложение имело бы такие же накладные расходы, как если бы оно было создано с использованием FastAPI. И во многих случаях валидация и сериализация данных представляют собой самый большой объём кода, написанного в приложениях. |
|||
* Таким образом, используя FastAPI Вы потратите меньше времени на разработку, уменьшите количество ошибок, строк кода и, вероятно, получите ту же производительность (или лучше), как и если бы не использовали его (поскольку Вам пришлось бы реализовать все его возможности в своем коде). |
|||
* FastAPI должно сравнивать с фреймворками веб-приложений (или наборами инструментов), которые обеспечивают валидацию и сериализацию данных, а также предоставляют автоматическую документацию, такими как Flask-apispec, NestJS, Molten и им подобные. |
|||
* Так же, как Starlette использует Uvicorn и не может быть быстрее его, **FastAPI** использует Starlette, поэтому не может быть быстрее его. |
|||
* FastAPI предоставляет больше возможностей поверх Starlette. Возможности, которые вам почти всегда нужны при создании API, такие как валидация и сериализация данных. И при использовании FastAPI вы получаете автоматическую документацию бесплатно (автоматическая документация даже не добавляет накладные расходы на выполнение приложений, она создается при запуске). |
|||
* Если бы вы не использовали FastAPI и использовали Starlette напрямую (или другой инструмент, такой как Sanic, Flask, Responder и т.д.), вам пришлось бы реализовать всю валидацию и сериализацию данных самостоятельно. Таким образом, ваше конечное приложение все равно имело бы те же накладные расходы, как если бы оно было создано с использованием FastAPI. И во многих случаях валидация данных и их сериализация составляют наибольшую часть кода, написанного в приложениях. |
|||
* Таким образом, используя FastAPI, вы экономите время на разработку, снижаете вероятность ошибок, количество строк кода и, вероятно, получаете такую же производительность (или лучше), как если бы вы не использовали его (так как вам пришлось бы реализовать все в вашем коде). |
|||
* Если вы сравниваете FastAPI, сравнивайте его с фреймворками веб-приложений (или наборами инструментов), которые обеспечивают валидацию данных, сериализацию и документацию, такими как Flask-apispec, NestJS, Molten и другие. Фреймворки с интегрированной автоматической валидацией данных, сериализацией и документацией. |
|||
|
@ -0,0 +1,18 @@ |
|||
Translate to Russian (русский язык). |
|||
|
|||
--- |
|||
|
|||
For the next terms, use the following translations (use correct suffixes, prefixes and endings depending on the context): |
|||
|
|||
production (meaning production software or environment): продакшн |
|||
completion (meaning code auto-completion): автозавершение |
|||
editor (meaning component of IDE): редактор кода |
|||
adopt (meaning start to use): использовать |
|||
headers (meaning HHTP-headers): HTTP-заголовки |
|||
cookie sessions: сессии с использованием cookie |
|||
tested (adjective): протестированный |
|||
Middleware: Middleware (don't translate, but add (Промежуточный слой) if clarification is needed) |
|||
path operation: обработчик маршрута |
|||
proprietary: проприетарный |
|||
benchmark: бенчмарк (add (тест производительности) if clarification is needed) |
|||
ASGI server: ASGI-сервер |
Loading…
Reference in new issue