0
0
FastAPIframework~8 mins

Shared dependencies across routers in FastAPI - Performance & Optimization

Choose your learning style9 modes available
Performance: Shared dependencies across routers
MEDIUM IMPACT
This affects the server response time and resource usage by controlling how often dependencies are created and reused across different routes.
Using the same dependency in multiple routers
FastAPI
from fastapi import FastAPI, Depends, APIRouter

app = FastAPI()

async def common_dep():
    # expensive setup
    return 'resource'

app_dependency = Depends(common_dep)

router1 = APIRouter(dependencies=[app_dependency])
@router1.get('/items')
async def items(dep=Depends(common_dep)):
    return {'dep': dep}

router2 = APIRouter(dependencies=[app_dependency])
@router2.get('/users')
async def users(dep=Depends(common_dep)):
    return {'dep': dep}

app.include_router(router1)
app.include_router(router2)
The dependency is declared once at the router level and shared, so it runs only once per request for all routes in that router.
📈 Performance GainReduces redundant calls, lowering CPU usage and improving response time.
Using the same dependency in multiple routers
FastAPI
from fastapi import FastAPI, Depends, APIRouter

app = FastAPI()

async def common_dep():
    # expensive setup
    return 'resource'

router1 = APIRouter()
@router1.get('/items')
async def items(dep=Depends(common_dep)):
    return {'dep': dep}

router2 = APIRouter()
@router2.get('/users')
async def users(dep=Depends(common_dep)):
    return {'dep': dep}

app.include_router(router1)
app.include_router(router2)
The dependency common_dep is called separately for each router and each request, causing repeated expensive setup.
📉 Performance CostTriggers redundant dependency calls per request, increasing response time and CPU usage.
Performance Comparison
PatternDependency CallsCPU UsageResponse TimeVerdict
Separate dependency per routeMultiple calls per requestHighSlower[X] Bad
Shared dependency at router levelSingle call per request per routerLowerFaster[OK] Good
Rendering Pipeline
In FastAPI, dependencies are resolved before route handlers execute. Shared dependencies reduce repeated setup work, improving server processing before response generation.
Dependency Resolution
Request Handling
⚠️ BottleneckRepeated dependency calls increase CPU and delay response generation.
Optimization Tips
1Declare shared dependencies at router or app level to avoid repeated calls.
2Avoid declaring expensive dependencies inside each route function.
3Use FastAPI's dependencies parameter on routers to optimize resource usage.
Performance Quiz - 3 Questions
Test your performance knowledge
What is the main performance benefit of sharing dependencies across routers in FastAPI?
AIncreases the number of dependency calls for better caching
BMakes each route load dependencies independently
CReduces redundant dependency calls per request
DRemoves the need for dependencies entirely
DevTools: Network and Performance panels
How to check: Use the Network panel to measure response times for routes using shared vs separate dependencies. Use Performance panel to profile CPU usage during requests.
What to look for: Look for lower response times and reduced CPU spikes when shared dependencies are used.