И дальше идет интересное, оказывается
FastAPI (а точнее Starlette на которой он основан) читает файл чанками(кусочками) и отдает браузеру. И чтение файла по кусочку в цикле - очевидно не самая эффективная операция.А вот aiohttp поступает умнее - он использует
loop.sendfile, который в свою очередь использует os.sendfile() который использует доступную на Linux и MacOS функцию ядра sendfile(), которая позволяет отправить файл в сокет максимально эффективно. И судя по тестам вариант с sendfile в 7 раз быстрее.В общем, если вы генерируете и отдаете в браузер файлы питоном и делаете это часто - посмотрите, как это реализовано в используемом вами фреймворке, возможно вы сможете сэкономить ресурсы. Оригинальная статья https://medium.com/@alsadi/secret-sauce-is-zero-copy-single-context-switching-b749bd614dca