Короткий ответ Middleware реализуется как вызываемый класс с методом __call__, принимающий get_response в конструкторе; его нужно разместить как можно раньше в MIDDLEWARE, чтобы замер включал время работы всех последующих middleware и view. Как это работает подробнее Современный стиль middleware в Django — класс с __init__(self, get_response) и __call__(self, request), который вызывает self.get_response(request) для передачи запроса дальше по цепочке и получает response для пост-обработки. Пример кода Что использовать на практике Практика. Замер времени логично делать «снаружи» (ближе к началу списка MIDDLEWARE), чтобы учесть работу всех остальных middleware; добавление заголовка X-Response-Time в ответ помогает диагностировать медленные запросы в production без дополнительного профилирования. Подводные камни Риск. Размещают измеряющий middleware слишком «глубоко» в списке (близко к view), из-за чего он не учитывает время работы middleware аутентификации/сессий, которые могут быть источником задержки; забываю