
A web performance budget is an agreed set of limits that every page must stay within, such as total page weight, script size, number of requests and key timing metrics. Teams adopt budgets because sites rarely get slow in one step; they get heavier a little at a time. A budget turns speed from a vague wish into a rule that is checked automatically before changes go live.
Key takeaways
- A budget is a limit your team agrees on, measured and enforced, not a one-off audit.
- Budgets work because they stop gradual bloat: every new script, image or feature has to fit or trade something off.
- Combine lab measurements for quick checks with field data from real visitors for the truth.
- Set limits from your competitors, your audience's devices and connections, and your business goals, not from a universal number.
- Automate the check in your build pipeline so a breach fails the build.
- Everyone owns a part: designers, developers and marketers each add weight.
What is a performance budget in plain words?
Think of a household budget. You do not decide each purchase in isolation; you have a limit and every purchase eats into it. A performance budget does the same for a page. It might cap the total weight of what the browser downloads, the amount of JavaScript, the size of the largest image, the number of third-party requests, and target values for loading, responsiveness and visual stability.
We deliberately avoid quoting universal numbers here. The right limits depend on your audience, your devices and networks, and your competitors. A site used mostly on mid-range phones over mobile data needs tighter limits than an internal tool used on office broadband.
Why do budgets work when good intentions do not?
Without a budget, each addition looks harmless. A new chat widget, another font weight, a hero video, a tag for the latest ad platform: each is defensible on its own. Months later, pages are slow and nobody can say which change did it.
A budget changes the conversation. Instead of "can we add this?", the question becomes "what does this cost, and what will we remove or optimise to afford it?" That framing is fair, visible and hard to argue with.
Which metrics should you budget?
Quantity metrics
These are easy to measure and easy to enforce in a build.
- Total transferred page weight
- JavaScript size, compressed and uncompressed
- CSS size
- Image weight and the largest single image
- Number of requests and number of third-party domains
- Font files and weights loaded
Timing and experience metrics
These reflect what users feel. Core Web Vitals, which cover loading, interaction responsiveness and visual stability, are sensible targets because they are publicly defined and measured on real users. Our guide to Core Web Vitals and how to improve them covers each one.
Lab data versus field data
- Lab data comes from controlled tests on a fixed device and network profile. It is repeatable, so it is good for catching regressions in a pull request.
- Field data comes from real visitors. It shows the variety of devices, locations and connections you actually serve.
Use lab data to gate changes and field data to judge whether the budget is set in the right place.
How do you set a budget from competitors and business goals?
- Benchmark competitors. Test your top rivals' key pages on the same profile. A sensible goal is to be at least as fast as the best of them on pages that matter.
- Know your audience. Check which devices and connection types your analytics show.
- Tie it to goals. If checkout abandonment is a worry, budget the checkout path strictly. If organic traffic matters, budget landing and article pages.
- Start from today's baseline. Measure now, set limits slightly better than current, then tighten over time. A budget nobody can meet on day one gets ignored.
- Write it down. One page, with owners and a review date.
Should every page type have the same budget?
No. Different page types have different jobs.
- Home and landing pages: rich visuals, but the first view must be fast.
- Article pages: mostly text, so limits can be tight.
- Product and category pages: many images, so image budgets matter most.
- Checkout and forms: keep them lean; every extra script is a risk to completion.
- Logged-in dashboards: more JavaScript is normal, but responsiveness still matters.
Set a budget per template, not one number for the whole site.
How do you enforce a budget in CI?
A budget that lives in a document gets forgotten. Put it in the pipeline. Our overview of CI/CD and DevOps basics for small teams explains the surrounding workflow.
- Add a build step that measures bundle sizes and fails if a limit is exceeded.
- Run an automated lab test against a preview deployment of every pull request and compare it with the budget.
- Post results as a comment so reviewers see the cost of a change.
- Allow documented overrides, described below, rather than silent bypasses.
- Keep a history so trends are visible, not only pass or fail.
Automation should block clear breaches but be tolerant of normal measurement noise, otherwise people start ignoring failures.
How should you govern third-party scripts?
Third-party code is often the biggest source of weight and delay, and the least controlled.
- Single owner. Every tag has a named person and a stated purpose.
- Tag manager rules. Who can publish tags, what review is needed and which pages a tag may run on.
- Entry check. Before adding a script, ask what it does, how large it is, whether it blocks rendering and whether it duplicates something already installed.
- Regular review. Remove tags for ended campaigns and unused tools.
- Loading strategy. Defer non-essential scripts and keep them off checkout and form pages where possible.
- Privacy. Align with your consent setup; see website analytics setup for what is worth tracking.
What about image and font budgets?
Images are usually the heaviest part of a page. Set a maximum per image type (hero, thumbnail, gallery), require modern formats, responsive sizes and lazy loading below the fold. Our guide to image optimisation for faster websites covers the techniques.
For fonts, cap the number of families and weights, subset to the characters you need, and choose a loading approach that avoids invisible text. Every extra weight is another download.
Who is responsible for what?
- Designers: choose fewer font weights, avoid heavy video and effects, supply images at sensible sizes and design with a budget in mind.
- Developers: keep bundles lean, split code, remove unused libraries, and own the CI checks.
- Marketers: request new tags and embeds through the review process and retire old ones.
- Product owner or manager: decides trade-offs and signs off exceptions.
How do you handle exceptions and trade-offs?
Sometimes a feature is worth its weight. Make that a conscious decision.
- Record the request, the cost and the benefit.
- Offer a trade: remove something equivalent, or load the new feature only where it is needed.
- Give approvals an expiry date so exceptions are reviewed.
- Keep a short log of agreed exceptions.
How do you monitor real users over time and report to stakeholders?
Collect field data for Core Web Vitals and key timings, segmented by page type and device class. Look at trends monthly, and check after major releases or new tags.
For non-technical stakeholders, avoid jargon. Report three things: are we within budget, what changed since last time, and what is the business risk or benefit. A simple traffic-light summary per page type, plus one sentence on what was done about any red items, is enough.
An imaginary example
Imagine a regional retailer whose product pages have slowly become sluggish. The team measures competitors, sets a per-template budget slightly better than today's baseline, and adds a build check that fails when script size or image weight exceeds its limit. A marketing request for a new tracking tag now goes through review, and an older unused tag is removed to make room. Over the next months, field data shows the trend stabilising rather than creeping upwards.
Common mistakes
- Setting one site-wide number for every page.
- Budgeting only in the lab and never checking real users.
- Letting the budget become a document rather than a build rule.
- Ignoring third-party scripts because "marketing owns them".
- Choosing limits so strict that everyone works around them.
- Never revisiting the budget as devices and content change.
FAQ
What is a performance budget in web development?
A performance budget is a set of limits a team agrees for a website, such as page weight, script size, request counts and timing metrics. Builds are checked against those limits so that new work cannot quietly make pages slower.
What should a performance budget include?
Include a few quantity limits such as JavaScript, images and third-party requests, plus experience targets such as the Core Web Vitals. Set them per page type, from your competitors and your audience's real devices, rather than copying a number from elsewhere.
How do you enforce a performance budget?
Add automated checks to your build pipeline that measure bundle sizes and run lab tests on each preview deployment. If a limit is breached, the build fails or flags the change for review. Pair this with field monitoring of real visitors.
Who should own the performance budget?
Shared ownership works best, with one named owner who keeps the budget current. Designers, developers and marketers all add weight, so each needs clear rules and a route to request exceptions.
Related reading
- Core Web Vitals: What They Are and How to Improve Them
- Image Optimisation for Faster Websites
- DevOps Basics: CI/CD for Small Teams Without the Jargon
Next steps
Pick your three most important page types, measure them today and write down one limit for each. Add one automated check and one tag-review rule this month. If you would like help setting this up, our team can work with you; contact us to start the conversation.



