Open React DevTools → Profiler → record while moving a slider. See: EVERY component re-renders on every slider move (the entire tree!).
Understand why: parent state changes → all children re-render (React's default behavior).
const LayerPanel = React.memo(
function LayerPanel({ layers, onReorder }) {
// Only re-renders if `layers` or `onReorder`
// actually changed
return (/* ... */);
}
);
const handleReorder = useCallback(
(layerId, direction) => {
// ... reorder logic
},
[layers] // Only recreated when layers change
);
const processedImage = useMemo(() => {
return applyAllFilters(originalImage, filterState);
}, [originalImage, filterState]);
// Only recompute when inputs change
Profile again: 70% reduction in unnecessary re-renders.
Understand when NOT to optimize — premature optimization is the root of all evil. Only optimize components that are measurably slow.
git switch -c perf/PIXELCRAFT-035-render-optimization
git add src/
git commit -m "Optimize renders with memo, useMemo, useCallback (PIXELCRAFT-035)"
git push origin perf/PIXELCRAFT-035-render-optimization
# PR → Review → Merge → Close ticket ✅
Trees are the most common data structure in computing.
React's reconciliation is tree diffing: compare old tree with new tree, find minimum changes. O(n) — a remarkable achievement.