RFC 9842 lets browsers reuse a previous version of a file as a compression dictionary for the next version. When 95% of your JavaScript is unchanged between deploys, the transfer drops from tens of kilobytes to under a kilobyte.
Load app.v1. The response includes a
Use-As-Dictionary header, telling the browser to store
this file as a dictionary for future requests matching the same
URL pattern.
A new deploy changes 1.2% of the code. The browser sends
Available-Dictionary, and gets back a
Content-Encoding: dcz response — a tiny delta
against the dictionary.
Yet another release with 1.5% code change. Same dictionary mechanism, same tiny transfer.
app.v1.js, the server responds with a
Use-As-Dictionary header containing a URL match
pattern (e.g. /assets/app.*.js). The browser caches
this response as a compression dictionary.
app.v2.js after a deploy), the browser
sends an Available-Dictionary header with the SHA-256
hash of the stored dictionary, and adds dcz to
Accept-Encoding.
Content-Encoding: dcz
(Dictionary Compressed Zstandard).
Use-As-Dictionary in the response headersAvailable-Dictionary in the request headersContent-Encoding: dcz in the response headerschrome://net-internals/#sharedDictionaryEach bundle is ~144 KB of realistic JavaScript: a virtual DOM implementation, router, state management, charting library, form validation, i18n strings, CSS-in-JS runtime, markdown parser, HTTP client, date utilities, and geospatial functions.
Between versions, only 1–2% of the code changes: a few components get new features, a string table is updated, new routes are added. This mirrors real-world deploys where framework and library code stays the same.