Как я ускорил dependency injection в Python в 130 раз: от рефлексии до компиляции графа
«Контейнер для DI — это лишний оверхед, передай зависимость руками и не выдумывай». Я тоже так считал, пока не замерил: наивный контейнер резолвил типичный сервис-граф примерно в 200 раз медленнее ручной сборки. Рассказываю, как тремя шагами — кэш плана, удаление проверки, которая всё равно не срабатывает, и компиляция графа в одну плоскую функцию — довёл резолв с 52.9 до 0.40 мкс/оп, почти как руками. И как при этом не дал exec-кодогенерации тихо собирать не те объекты в проде. Приёмы переносимые: профилирование микрооверхеда, выкидывание мёртвой защиты, фаззинг на эквивалентность. Читать разбор
https://habr.com/ru/articles/1048184/
#python #оптимизация_производительности #профилирование #dependency_injection #метапрограммирование #кодогенерация #бенчмарк #cpython
