Page Size and Request Count, Explained
After reading this you can find out how much a page weighs, count how many separate files it pulls in, and tell which resources deserve the blame for a slow load.
What page weight and request count actually measure
Every web page is a set of files. The HTML document arrives first. It references other files: scripts, stylesheets, images, fonts, and sometimes embedded pages (iframes). The browser fetches each one. Page weight is the total size of all those files added together. Request count is how many separate files the browser had to ask for.
Both numbers matter, and they matter differently. A page that weighs 3 MB in 12 requests behaves differently from one that weighs 1 MB in 90 requests. The first is heavy; the second is chatty. Each request carries its own connection overhead and latency, so 90 small files can be slower than one large file even when the large file holds more bytes.
Here is the hook. Suppose two pages both weigh 2 MB. Page A is 1.8 MB of images and 0.2 MB of everything else. Page B is 1.4 MB of JavaScript and 0.6 MB of everything else. Page B will almost always feel slower, because the browser must parse and execute those scripts before the page becomes interactive. Images just decode and paint. The byte count alone hides that difference, which is why the analyzer breaks weight down by resource type.
When to run this check and when it will mislead you
Run it when a page feels slow and you want evidence before you start optimizing. It answers one question well: where do the bytes come from? If a single hero image is 1.2 MB out of a 2 MB page, you know exactly what to fix.
Run it also as a sanity check after a redesign. A new template that adds a font library and three tracking scripts can double request count without anyone noticing until Monday.
This check reads the first 30 resources referenced directly in the HTML. Resources that JavaScript loads later (lazy images, ads injected after render, single-page-app chunks) are invisible to it. On a script-heavy page, the real weight can be several times what this tool reports.
So do not treat the total as the final word for a heavily interactive application. Treat it as the weight of the initial document and its declared dependencies. For a mostly static page, that is nearly the whole story.
The arithmetic behind the totals
The math is addition, but the interpretation needs care. Total weight is the sum of each resource size:
Here W is total page weight, n is the number of resources counted (at most 30 here), and s_i is the size in bytes of resource i, taken from its HTTP Content-Length header.
To see where weight concentrates, compute each resource's share:
A useful rule: if the largest single resource is more than 40% of total weight, one file dominates the page and fixing it fixes most of the problem. If no resource exceeds 10%, weight is spread across many files, and the real lever is reducing request count rather than shrinking any one file.
To weight the cost of scripts more honestly, apply a rough execution penalty. A common working figure: JavaScript costs about 3 times as much wall-clock time per kilobyte as an image of the same size, because it must be parsed and executed, not just decoded.
Here C is an effective cost estimate, s_{\text{img}} is total image bytes and s_{\text{js}} is total script bytes. The factor 3 is a heuristic, not a physical constant, but it stops you from treating a megabyte of script as harmless just because a megabyte of images sits next to it.
Worked example: analyzing example.com
Enter https://example.com in the tool and press the demo button. That page is deliberately minimal, so the numbers are small and easy to check by hand. Suppose the analyzer reports these resources:
| Resource | Type | Size (KB) | Share of weight |
|---|---|---|---|
| Document (HTML) | html | 1.256 | 78.5% |
| Inline style | style | 0.000 | 0.0% |
| favicon.ico | image | 0.344 | 21.5% |
- Add the sizes:
1.256 + 0.000 + 0.344 = 1.600 KB. That is the total weight W. - Count the requests: 2 files were fetched (the HTML document itself plus the favicon). The inline style adds no request because it lives inside the HTML.
- Compute the largest share:
1.256 / 1.600 = 0.785, so the HTML is 78.5% of the page. One resource dominates. - Apply the script penalty: there is no JavaScript, so C = W = 1.6 KB. Nothing to worry about.
The lesson from a tiny page is the same as from a large one: read the total, find the dominant resource, then check whether scripts are inflating the real cost.
Watching JavaScript reshape the real cost
The gap between raw bytes and felt cost is the one thing a table cannot show well. Move the slider below and watch the effective cost climb far faster when the extra weight is script rather than image.
Reading the results without fooling yourself
Start with the total and compare it to the median. The median web page weighs a little over 2 MB. If your page is under 1 MB you are lighter than most; if you are over 4 MB you are heavier than most and users on slow connections will feel it.
Next, sort resources by size and look at the top three. On most real pages, the top three resources account for 50% to 80% of total weight. Fix those first. Shaving 5 KB off a stylesheet while a 900 KB uncompressed image sits untouched is wasted effort.
Then look at request count separately from weight. A 1.5 MB page in 15 requests is well-built. A 1.5 MB page in 120 requests is fragmented, and consolidating files will help even though total bytes stay the same.
Common mistakes
The first mistake is trusting the total on a script-heavy page. If the site is a single-page application, most of its content loads after the initial HTML, and this check sees only the opening move.
The second mistake is reading compressed and uncompressed sizes as the same thing. The Content-Length header reports the transferred size, which is usually gzip or brotli compressed. A 900 KB text file may transfer as 180 KB. Images and fonts are already compressed, so their transferred size is close to their real size.
When you find a heavy image, check its dimensions against how it is displayed. A 2000-pixel-wide photo shown in a 400-pixel box wastes about 96% of its pixels. Resizing it to 400 pixels typically cuts its weight by more than 80%.
The third mistake is optimizing request count by inlining everything. Inlining a large script into the HTML removes one request but makes the HTML uncacheable and larger on every page. Balance matters.
Related tools
Weight tells you how much a page costs to load. It says nothing about what the page is about. If you want to check whether your text actually covers its target terms, run the copy through the Keyword Density Checker, which reports word and phrase frequencies with a stopword filter.
Frequently asked questions
Why does the tool only check 30 resources?
Thirty resources cover the initial page load for almost every static and content-driven page. Fetching every resource on a large page could mean hundreds of requests and a long wait, so the check stops at 30 to stay fast. Pages that reference more than 30 files are already candidates for consolidation.
Why does my page weigh less here than in my browser's dev tools?
Your browser executes JavaScript, which loads additional images, fonts and data after the initial HTML. This check does not execute scripts, so it misses those later requests. On an interactive app the difference can be a factor of 3 or more.
What is a good page weight to aim for?
Under 1 MB is comfortable for most audiences, including mobile users on slower connections. Between 1 MB and 2 MB is normal. Above 4 MB you should have a specific reason, such as a portfolio built around large photographs, and even then lazy loading helps.
Does page weight affect search rankings?
Indirectly. Weight influences load speed, and load speed feeds into Core Web Vitals, which is a documented ranking signal. But weight itself is not a ranking factor. A fast 3 MB page can outrank a slow 1 MB page. Treat weight as a means to speed, not an end.
Why can't the tool read my staging site?
The check runs from our server and fetches the URL over the public internet. A site behind a login, a firewall or a local-only address is not reachable, so the request fails. Point it at a publicly accessible URL.