Byte Size
asset.js is under 500 bytes. It adds one small network request per page, executes in microseconds, and does not affect your page's bundle size because it is an external file loaded with defer.
Why size is worth knowing
Every third-party script added to a page costs a network round trip, a parse step, and execution time. Those costs compound when several scripts are loaded. Knowing that a script is under 500 bytes tells you it contributes negligibly to any of those budgets.
At that size, the file is smaller than most image thumbnails. A typical JPEG thumbnail is larger. The script does not affect Largest Contentful Paint because it is external and deferred. It does not block the main thread in any meaningful way.
Live byte count
The Features page on statelessid.com shows the live byte count for the current build of asset.js. That number reflects the uncompressed source served to the browser. Gzip or Brotli compression applied by the server in transit typically reduces the transfer size further — sometimes by half or more for short text files.
The number on the Features page updates when the script updates. If you need to report the exact size for a performance audit, read it from there rather than from a cached copy.
What keeps it small
No external dependencies. No analytics library. No framework. The script does one thing: read four values from the DOM and the performance API, assemble a small payload, and send it. The code is minimal and hand-written for this specific task. Nothing ships that is not directly used in the beacon-send path.
The feature set and the size are linked. A script that tracks clicks, scroll depth, session replay, and custom events is necessarily larger. asset.js does not do those things. The small size is not a compression trick — it reflects the scope of what the script does.
Caching
After the first page load, the browser caches asset.js. Subsequent page loads on the same origin within the cache window do not re-download the file. The cache window is set by the server response headers.
The beacon still fires on every page load even when the script is served from cache. Caching reduces the cost of transferring the script file — it does not suppress the beacon. One page load, one beacon, regardless of whether the script came from the network or the cache.
Troubleshooting
If a performance audit flags asset.js as blocking render or contributing to Time to Interactive, confirm that defer is present in the script tag. Without defer, the browser halts HTML parsing when it encounters the script tag, downloads the file, and executes it before continuing. With defer, the download happens in parallel and execution waits until the document is parsed. Remove and re-add the tag from your dashboard Settings → Script tab to get the canonical tag with defer included.
If a size comparison to other analytics scripts surprises you by how small asset.js is, that is because most analytics tools ship a full SDK alongside the beacon — configuration management, event queue, retry logic, identity resolution, and more. asset.js has no SDK layer. The file does exactly what a minimal page-load beacon needs and nothing more.