Performance
How the Korvus snippet affects your site's performance: size, loading, execution and network.
Script size
The Korvus snippet is a single file with no external dependencies:
| Metric | Value |
|---|---|
| Raw size | ~34 KB |
| Gzipped size | ~10.5 KB |
| Dependencies | 0 |
Asynchronous loading
The snippet loads with the async attribute. It never sits in your page's critical rendering path:
- No blocking of HTML parsing
- No impact on First Contentful Paint (FCP)
- No impact on Largest Contentful Paint (LCP)
- No Cumulative Layout Shift (CLS), since the snippet injects no visual element
Runs after the page has fully loaded
All snippet execution starts after the window.load event, followed by a setTimeout(0). In practice, Korvus waits until your site is fully loaded and rendered before it starts collecting data, so your content, images and business scripts always load first.
Zero DOM changes
The snippet reads the DOM to detect signals (prices, stock, visible errors, structured data) but never changes it:
- No injected HTML elements
- No CSS style changes
- No overlay, banner or widget
- No impact on how your page renders
The only exception: the video proof module
This module is off by default and only switched on if you ask for it. When it is active, it writes to the DOM in two ways:
- A
<script>tag added to the<head>to load the module's code from our CDN. It is the only way to do this without requiringunsafe-evalin your Content Security Policy. - A hidden
iframecreated by the recording library, which uses it to read browser APIs that other scripts on the page have not altered. It is invisible, loads no page, and is removed when recording stops (on WebKit browsers, it stays in place for the whole capture).
Neither has any visual effect or affects how your page renders. They still write to the DOM: the four points above describe the base snippet, not a site where video proof is turned on. What this module collects: Data collected.
Batched sending
Collected data is not sent in real time. It is grouped and sent in a single network call every 30 seconds:
- A single HTTP request per batch (using
fetchwithkeepalive: true) - Buffer capped at 100 events + 50 pageviews per batch
- Automatic flush when the user leaves the tab (
visibilitychange) - No network call on every click or interaction
Inactivity detection
If a visitor stops interacting with the page for 30 minutes (no mouse movement, typing, scrolling or touch), the snippet automatically stops all collection:
- Observers and listeners are detached
- No more network requests are sent
- CPU and battery resources are released
If the visitor comes back and interacts again, collection resumes automatically.
CDN and caching
The script is served from a CDN (Scaleway Edge Services) with a 1-hour cache. Returning visitors load the snippet from their browser cache, with no extra network request.
Full isolation
The snippet runs inside a global try/catch. If an internal error occurs, it is silently ignored. The snippet can never:
- Block your site from loading
- Cause a visible JavaScript error
- Interfere with your other scripts