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.

Page-weight report

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

SectionWhat you learn
ScriptsExternal 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.
StylesheetsExternal <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 resourcesImages (and how many are loading="lazy"), iframes, audio/video, and resource hints (preload, prefetch, preconnect, dns-prefetch).
Estimated requestsA lower-bound count of network requests: the HTML document plus its external scripts, stylesheets, images, iframes, media, and font preloads.
Estimated weightThe 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

OptionWhat it does
Output format — report (default)A readable text summary with sections and recommendations.
Output format — jsonA machine-readable object with every count and the estimate, handy for scripting or feeding another tool.
List every external resource URLAdds 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-blockingprint.css is print-only, so it doesn't block) and 2 external scripts (1 parser-blockinganalytics.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=true

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.