Page Weight Analyzer
Paste a page's HTML and see its scripts, stylesheets, images, render-blocking resources, and an estimated weight budget. Runs entirely in your browser — no server, no sign-up.
What this tool does
Paste a page's HTML source and get an instant front-end performance snapshot: how many scripts and stylesheets it loads, which of them block rendering, how big the inline JavaScript and CSS are, how many network requests the page is likely to make, and a rough page-weight budget. Everything runs locally in your browser — nothing is uploaded, it works offline, and there's no sign-up.
It's a quick first-pass audit for spotting render-blocking resources, bloated inline code, and pages that load far too many files — without opening DevTools.
What it reports
| Section | What you learn |
|---|---|
| Scripts | External vs inline count; how many external scripts are parser-blocking (classic scripts with no async/defer); how many use async, defer, or type="module"; how many inline scripts run synchronously; and the total inline JS size. |
| Stylesheets | External <link> vs inline <style> count; how many stylesheets are render-blocking (print-only and disabled sheets are excluded); and the total inline CSS size. |
| Other resources | Images (and how many are loading="lazy"), iframes, audio/video, and resource hints (preload, prefetch, preconnect, dns-prefetch). |
| Estimated requests | A lower-bound count of network requests: the HTML document plus its external scripts, stylesheets, images, iframes, media, and font preloads. |
| Estimated weight | The HTML's exact byte size plus a rough estimate of the external resources, compared against a common performance budget. |
How the weight estimate works
The size of the pasted HTML is measured exactly. The tool can't download the external files (it never makes a network request), so their sizes are estimated from typical median transfer sizes — about 30 KB per script, 16 KB per stylesheet, 30 KB per image, 25 KB per font, and 60 KB per iframe document. The real numbers depend on your actual files, so treat the external estimate as a ballpark for catching obviously heavy pages, not an exact measurement. The request count is also a lower bound: assets that CSS or JavaScript fetch at runtime can't be seen in static HTML.
Render-blocking, briefly
A parser-blocking script is a classic <script src="..."> with no async or
defer — the browser stops building the page until it downloads and runs. Adding
defer (or type="module", which defers by default) lets parsing continue. A
render-blocking stylesheet is a normal <link rel="stylesheet"> — the
browser won't paint until it loads. Inlining critical CSS and deferring the rest
removes the block. The report flags both and suggests the usual fixes.
Options
| Option | What it does |
|---|---|
| Output format — report (default) | A readable text summary with sections and recommendations. |
| Output format — json | A machine-readable object with every count and the estimate, handy for scripting or feeding another tool. |
| List every external resource URL | Adds a grouped list of every script, stylesheet, image, font, iframe, and media URL found in the markup. |
Examples
Paste a <head> like this:
<link rel="stylesheet" href="/main.css">
<link rel="stylesheet" href="/print.css" media="print">
<script src="/analytics.js"></script>
<script src="/app.js" defer></script>
…and the report shows 2 stylesheets (1 render-blocking — print.css is
print-only, so it doesn't block) and 2 external scripts (1 parser-blocking —
analytics.js has no defer; app.js does), along with a note to add defer
or async to the blocking one.
FAQ
Is it free and private?
Yes. The HTML you paste never leaves your device, and the tool keeps working offline once the page has loaded.
Why are the external file sizes only estimates?
The tool runs entirely in your browser and never makes network requests, so it can't download the linked scripts, styles, images, or fonts to measure them. It estimates their sizes from typical median transfer sizes. The HTML you paste is measured exactly.
What counts as a "render-blocking" stylesheet?
A normal <link rel="stylesheet"> with no media restriction.
Sheets marked media="print" or disabled are excluded
because they don't block the first paint.
Why is the request count a "lower bound"?
Static HTML only shows the resources written directly in the markup. Files
that CSS (background images, @import, web fonts) or JavaScript fetch
at runtime aren't visible, so the real request count is usually higher.
Can I get the results as JSON?
Yes. Switch the output format to "json" for a structured object containing every count and the estimate, ready to script against.
Do data: URIs count as requests?
No. Inline data: URIs are embedded in the HTML itself, so they add
to the document's measured size but aren't counted as separate network
requests.
Developer & Automation Access
Run it from the terminal
Same engine as this page, headless — via the gizza CLI:
gizza tool page-weight-analyzer '<!doctype html>
<html>
<head>
<link rel="stylesheet" href="/main.css">
<script src="/app.js"></script>
</head>
<body>...</body>
</html>'New to the CLI? Get gizza →
Open it by URL
Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:
https://gizza.ai/tools/page-weight-analyzer/?html=%3C%21doctype%20html%3E%0A%3Chtml%3E%0A%3Chead%3E%0A%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22%2Fmain.css%22%3E%0A%20%20%3Cscript%20src%3D%22%2Fapp.js%22%3E%3C%2Fscript%3E%0A%3C%2Fhead%3E%0A%3Cbody%3E...%3C%2Fbody%3E%0A%3C%2Fhtml%3E&output=report&list_resources=trueMachine-readable descriptor: tool.json — title + parameters JSON Schema for agents.
