Northfield Studio

Performance Budgets for Small Sites

by Tomas Reyes

A stopwatch resting on a laptop keyboard

A performance budget is a short list of numbers your site is not allowed to exceed. Without one, pages creep heavier with every launch, every campaign and every well-meaning plugin. With one, slowdowns become a failing check instead of a vague feeling.

The budget we start with

These are our default targets for a small business site on a mid-range phone and a typical mobile connection. We adjust them per project, but we never remove them.

MetricTargetWhy it matters
Largest Contentful Paint2.0 s or lessPeople judge a page by when the main content appears
Total JavaScript150 KB or lessScripts cost far more to run than the same weight in images
Cumulative Layout Shift0.05 or lessShifting content causes mis-taps and lost trust
Total page weight1 MB or lessKeeps pages usable on slow connections

Enforcing it automatically

Budgets only work if something checks them. We run Lighthouse in the build pipeline and fail the deploy when a number slips. The assertion block looks like this:

assertions: {
  "largest-contentful-paint": ["error", { maxNumericValue: 2000 }],
  "total-byte-weight": ["error", { maxNumericValue: 1000000 }],
  "cumulative-layout-shift": ["error", { maxNumericValue: 0.05 }]
}

When the budget fails

A failing check is a conversation, not a crisis. Usually the cause is one oversized image or a third-party script, and the fix takes minutes. Occasionally the budget itself needs to move, and that should be a deliberate, written decision.

What gets measured on every deploy gets fixed. What does not, drifts.