Как я ускорил dependency injection в Python в 130 раз: от рефлексии до компиляции графа

«Контейнер для DI — это лишний оверхед, передай зависимость руками и не выдумывай». Я тоже так считал, пока не замерил: наивный контейнер резолвил типичный сервис-граф примерно в 200 раз медленнее ручной сборки. Рассказываю, как тремя шагами — кэш плана, удаление проверки, которая всё равно не срабатывает, и компиляция графа в одну плоскую функцию — довёл резолв с 52.9 до 0.40 мкс/оп, почти как руками. И как при этом не дал exec-кодогенерации тихо собирать не те объекты в проде. Приёмы переносимые: профилирование микрооверхеда, выкидывание мёртвой защиты, фаззинг на эквивалентность. Читать разбор

https://habr.com/ru/articles/1048184/

#python #оптимизация_производительности #профилирование #dependency_injection #метапрограммирование #кодогенерация #бенчмарк #cpython

Как я ускорил dependency injection в Python в 130 раз: от рефлексии до компиляции графа

Про DI в Python вечно всплывает один и тот же спор: контейнер — это лишний оверхед, протащи зависимость в конструктор руками и не выдумывай. Звучит логично, я и сам так долго считал. Но логично — не...

Хабр