Performance: Async middleware
Async middleware affects server request handling speed and responsiveness, impacting how fast pages start loading for users.
Jump into concepts and practice - no test required
def middleware(get_response): async def middleware_func(request): # Non-blocking async I/O result = await async_io_call() response = await get_response(request) return response return middleware_func
def middleware(get_response): def middleware_func(request): # Blocking I/O operation result = blocking_io_call() response = get_response(request) return response return middleware_func
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Sync middleware with blocking I/O | N/A (server-side) | N/A | N/A | [X] Bad |
| Async middleware with awaitable I/O | N/A (server-side) | N/A | N/A | [OK] Good |
async middleware in Django?__call__ method in Django?async def to use await inside.await with self.get_response(request) inside an async method.class LogMiddleware:
def __init__(self, get_response):
self.get_response = get_response
async def __call__(self, request):
print('Before response')
response = await self.get_response(request)
print('After response')
return response
class HeaderMiddleware:
def __init__(self, get_response):
self.get_response = get_response
async def __call__(self, request):
response = self.get_response(request)
response['X-Custom'] = 'Value'
return response
self.get_response(request) without await, causing a coroutine object instead of response.