3. MarkUs: Performance
My first impactful bug fix—instructors notice this one.
PR #7678
The Problem
A page was making 200+ SQL queries when it should have made 1. Classic N+1 pattern: loading a list, then lazily loading an association for each item.
# Before: N+1 queries
students.each do |student|
puts student.user.name # Each access triggers a query
endThe Fix
# After: 1 query with eager loading
students.includes(:user).each do |student|
puts student.user.name # Already loaded
endAdded includes(:user) to fix the 200→1 SQL query explosion.
What It Taught Me
Spotting N+1 patterns — Any time you loop over records and access an association, you might have an N+1. Watch for:
- Loops in views
- Serializers that access associations
- Any
eachblock touching related models
Rails eager loading — includes, preload, and eager_load each have different behaviors. Know when to use which.
Academic platform performance — When 50 TAs grade simultaneously, every query counts. What’s fine for 10 users breaks at 100.
This was my first “impactful” fix. Instructors actually noticed the page load time improvement.
Comments
Loading comments...