Performance: Caching strategies
Caching strategies improve page load speed by reducing server processing and network delays for repeated requests.
from fastapi import FastAPI from fastapi_cache import FastAPICache from fastapi_cache.backends.inmemory import InMemoryBackend from fastapi_cache.decorator import cache app = FastAPI() @app.on_event('startup') async def startup(): FastAPICache.init(InMemoryBackend()) @app.get('/data') @cache(expire=60) async def get_data(): data = await fetch_data_from_db() return data
from fastapi import FastAPI app = FastAPI() @app.get('/data') async def get_data(): # Fetch fresh data every request data = await fetch_data_from_db() return data
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| No caching, fetch fresh data every request | Minimal DOM nodes | Multiple reflows due to slow response | High paint cost due to delayed content | [X] Bad |
| Cache API responses for repeated requests | Minimal DOM nodes | Single reflow with fast response | Low paint cost with quick content display | [OK] Good |
@cache(expire=seconds) to set expiration time.@cache(expire=60) matches the correct pattern./data within 10 seconds?from fastapi import FastAPI
from fastapi_cache.decorator import cache
app = FastAPI()
@cache(expire=10)
async def get_data():
print('Fetching data')
return {'value': 42}
@app.get('/data')
async def data():
return await get_data()from fastapi import FastAPI
from fastapi_cache import FastAPICache
from fastapi_cache.backends.inmemory import InMemoryBackend
app = FastAPI()
@app.on_event('startup')
async def startup():
FastAPICache.init(InMemoryBackend())
@cache(expire=30)
async def get_info():
return {'info': 'cached data'}@cache but does not import it from fastapi_cache.decorator.get_user_profile function?from fastapi import FastAPI
from fastapi_cache import FastAPICache
from fastapi_cache.backends.redis import RedisBackend
from fastapi_cache.decorator import cache
import aioredis
app = FastAPI()
@app.on_event('startup')
async def startup():
redis = aioredis.from_url('redis://localhost')
FastAPICache.init(RedisBackend(redis), prefix='fastapi-cache')
@cache(expire=300)
async def get_user_profile(user_id: int):
# Simulate fetching user profile
return {'user_id': user_id, 'name': 'Alice'}Pass the test and this pattern moves unknown