
HTTP/2, HTTP/3 and Minification: Is Minification Still Worth It?
HTTP/2 and HTTP/3 change how files travel, not how big they are. Measured sizes, compile times and bundling tests show what minification still saves.
HTTP/2 changed how files travel, not how big they are
A claim keeps coming back: since HTTP/2 multiplexes requests, you no longer need to minify or bundle. Half of it is true. The protocol removed the cost of many small requests. It did not remove a single byte from a JavaScript file, and the browser still has to download, decode and compile every one of them. This guide separates what HTTP/2 and HTTP/3 changed from what they left alone. The figures come from three tests run on 22 October 2026 (the FastMinify benchmark dataset, a package of 644 modules and a V8 compile test). The RFCs and browser documentation cited along the way cover the protocol facts. For the compression side, see our GZIP and Brotli guide.
What the protocols changed, and what they left alone
HTTP/2 (RFC 9113, June 2022) carries many requests and responses at the same time on one connection. Under HTTP/1.1 a browser typically opened six connections per host and queued the rest. That queue is why teams concatenated files, drew image sprites and spread assets over several hostnames.
Improvements
HTTP/3 (RFC 9114, June 2022) keeps the HTTP model but runs over QUIC instead of TCP. A lost packet now stalls only the stream it belongs to, where on HTTP/2 it stalls every transfer on the connection.
Improvements
Both protocols move bytes. Neither one changes how many bytes a file has, and neither one parses your code.
Improvements
We used the FastMinify minification benchmark (edition 2026-10). It measures unminified files from public libraries raw, with gzip level 9 and with brotli quality 11. Each figure is a sum over the files of one language. JavaScript uses Terser 5.51.2 at default settings, CSS uses CSSO and JSON uses JSON.stringify.
Improvements
We downloaded lodash-es 4.18.1, which ships 644 JavaScript modules, minified each module with esbuild and compressed with gzip level 9 and brotli quality 11. It is an extreme case, since few pages load 644 modules, but it shows the mechanism.
Improvements
We compiled five libraries with V8 (Node 26.4.0 on an Apple M4 Max), once as shipped and once minified with Terser. The test uses new vm.Script on a source that changes on every run, to avoid the compile cache. Each figure is the median of 30 runs, then the median of five such series.
Improvements
What to keep and what to retire in 2026
These steps pay off on every protocol.
Each of them made sense with six connections per host. Some now cost you something.
Checking what your server really sends
Two quick checks give the answer, and a third explains why a first visit often shows h2.
The encoding depends on the header the client sends, so test with the header a browser sends.
Five mistakes that survive the move to HTTP/2
Moving to HTTP/2 or HTTP/3 is not a reason to ship readable code. The protocol has no say in what is inside the file.
Native modules and HTTP/2 make it possible to serve source files as they are. The V8 team still recommends bundling for production, and unbundled delivery only for small applications of under about 100 modules.
The opposite excess is as common. One bundle for every page means each deploy invalidates the whole cache and each page downloads code it never runs.
Several habits only made sense with six connections per host. Our Base64 guide covers the size cost of data URIs.
HTTP/3 improves how a connection recovers from packet loss. It does not shrink a page.
Four claims about HTTP/2, HTTP/3 and file size
The claim treats a faster transport as if it shrank the payload.
Compression and minification overlap, but they work on different things. Compression removes repetition. Minification removes what the program never needed.
Multiplexing removed the limit on parallel requests, not the other costs of a file.
HTTP/3 fixes one network problem, packet loss on a shared connection.
Minify and measure with FastMinify
The JavaScript minifier, CSS minifier, JSON minifier and HTML minifier run in your browser and show the original size and the output size.
Paste or drop the file
Paste the source into the input pane or drop a file. For JavaScript, pick the compression level (conservative, normal or aggressive).
Read the Compression panel
The panel shows the original size, the output size and the percentage saved. These are uncompressed sizes, so compare them with the raw figures in this article, not with what travels.
Check the console option
The JavaScript minifier removes console calls and debugger statements by default (options Remove Console and Remove Debugger). Switch them off if your code relies on them.
The JavaScript, CSS, HTML, XML, SVG and SQL minifier pages have a Concat files button. It joins the files you choose and minifies the result.
Open Concat files
Select Concat files on the minifier page, add your files and put them in the order they must run. Drag and drop sets the order.
Concatenate and minify
Run Concatenate & Minify. For JavaScript the tool joins files with a semicolon on its own line, so that one file cannot swallow the next, then minifies the whole. It does not resolve imports, so use your bundler for a real dependency graph (see online minifiers versus build tools).
Reproduce the measurements on your own files
curl -I sends a HEAD request, and a few servers answer it differently from a GET. Replace the URL with one of your own files.
Basic example
Save the script as size.mjs. It uses gzip level 9 and brotli quality 11, the settings of the benchmark.
Basic example
Usage
This measures compression only. Joining ES modules this way does not produce a working script, so use it on a folder to see the cost of tiny files.
Basic example
The script compiles a classic script without running it. new Script does not accept ES modules with import or export.
Basic example
Keep minifying and drop the HTTP/1.1 habits
HTTP/2 and HTTP/3 made small requests cheap. They did not make large files small. Minification still halves the compressed size of unminified JavaScript, trims a few percent from CSS and reduces compile work. What lost its value is the HTTP/1.1 toolkit of sharded hostnames, push and giant bundles. Minify, compress with brotli, bundle sensibly and judge the result by the bytes that travel.
Minify your files in the browser
Related Articles

Convert a Unix epoch to a readable date and back, tell seconds from milliseconds, and avoid time zone, JWT and clock change traps, all in your browser.

Read a cron expression field by field, check its next runs in UTC or local time and avoid traps with steps, time zones and dialects, all in your browser.

Compute network, mask, host range and broadcast of a CIDR, summarize ranges into minimal blocks and check an IP, all in your browser. Nothing is uploaded.