2.1 KiB
2.1 KiB
Performance Verification
Verification Checklist
After optimization, verify improvements:
- Data Size: Check response payload size
- Query Time: Measure database query duration
- Query Count: Ensure single query instead of N+1
- Memory Usage: Monitor application memory
Enable Query Logging
const prisma = new PrismaClient({
log: [
{ emit: 'event', level: 'query' },
],
})
prisma.$on('query', (e) => {
console.log('Query: ' + e.query)
console.log('Duration: ' + e.duration + 'ms')
})
Performance Testing
async function testQueryPerformance() {
console.time('Unoptimized')
await prisma.user.findMany({
include: { posts: true }
})
console.timeEnd('Unoptimized')
console.time('Optimized')
await prisma.user.findMany({
select: {
id: true,
name: true,
_count: { select: { posts: true } }
}
})
console.timeEnd('Optimized')
}
Payload Size Comparison
async function comparePayloadSize() {
const full = await prisma.post.findMany()
const optimized = await prisma.post.findMany({
select: {
id: true,
title: true,
excerpt: true,
}
})
console.log('Full payload:', JSON.stringify(full).length, 'bytes')
console.log('Optimized payload:', JSON.stringify(optimized).length, 'bytes')
console.log('Reduction:',
Math.round((1 - JSON.stringify(optimized).length / JSON.stringify(full).length) * 100),
'%'
)
}
Index Verification
Check that indexes exist for queried fields:
-- PostgreSQL
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = 'Post';
-- MySQL
SHOW INDEXES FROM Post;
Production Monitoring
Monitor in production:
- APM tools: Track query performance over time
- Database metrics: Monitor slow query log
- API response times: Measure endpoint latency
- Memory usage: Track application memory consumption
Expected Improvements
After optimization:
- Query count: Reduced to 1-2 queries (from N+1)
- Response size: 60-90% smaller payload
- Query time: Similar or faster
- Memory usage: 50-80% lower