Performance benchmark
We know every millisecond counts. When someone visits your website, the browser starts rendering content while it loads the scripts it needs, including consent management. We want Lawwwing to do its job without adding unnecessary work or hurting the browsing experience.
To check that, we compared Lawwwing with nine other consent management platforms (CMPs) using Lighthouse 13.5.0. We measured each one on the same test page and included a version with no CMP as a baseline.
These figures come from Lighthouse tests in a controlled environment, not from real visits. Your website's performance can vary for many reasons, including images, fonts, other scripts, the device, and the connection. These measurements do not replace field data (CrUX or RUM) and they do not guarantee the same results on every website.
Results
Mobile
98/100
Lighthouse score
Excellent performance in the mobile test scenario.
Desktop
100/100
Lighthouse score
Top score, with no loss against the baseline page.
Mobile
4 ms
Total Blocking Time
Very little main-thread blocking time.
Desktop
0 ms
Total Blocking Time
No measurable main-thread blocking during the test.
These results show that Lawwwing combines a high score with very low blocking time on the page we analyzed. To read the comparison, look at both the overall score and the metrics that make it up.
What these metrics measure
Lighthouse summarizes lab performance in a score from 0 to 100. That score is a useful reference, but the individual metrics help explain what happens during page load.
| Metric | What it tells you about your site | How to read it |
|---|---|---|
| Lighthouse score | Summarizes several lab performance metrics. | Higher is better. |
| LCP | How long it takes for the largest visible content element to appear. | Lower is better. |
| FCP | When the first content appears on screen. | Lower is better. |
| TBT | How long long tasks block the main thread. | Lower is better. |
| CLS | How much the page content shifts unexpectedly. | Lower is better. |
| Speed Index | How quickly the content is painted visually. | Lower is better. |
In our tests, every variant recorded a CLS of 0.000, so this metric does not distinguish between the CMPs on the page we analyzed.
The Lighthouse score weights the metrics differently: TBT accounts for 30% and LCP for 25%, while FCP and Speed Index account for 10% each. That is why two integrations with similar scores can behave differently during load.
Mobile comparison
The Lighthouse mobile scenario makes differences between integrations easier to see, because it simulates more limited processing and network conditions.
Lawwwing scores 98/100 and records only 4 ms of TBT, the lowest value among the ten CMPs in this test. You can explore each solution's results in the charts below.
Main-thread blocking time, from lowest to highest. Lawwwing records 4 ms in this test.
The page with no CMP scores 99. Lawwwing reaches 98/100 in the mobile scenario.
The “No CMP” row is the same page with no consent widget. We use it as a baseline to estimate the extra cost of each integration; it does not represent another vendor.
| Variant | Score | LCP | FCP | TBT | CLS | Speed Index |
|---|---|---|---|---|---|---|
| No CMP | 99 | 1.95 s | 0.78 s | 0 ms | 0.000 | 0.78 s |
| Lawwwing | 98 | 2.40 s | 1.52 s | 4 ms | 0.000 | 1.55 s |
| CookieFirst | 97 | 2.40 s | 1.60 s | 64 ms | 0.000 | 1.60 s |
| UniConsent | 97 | 2.55 s | 1.55 s | 35 ms | 0.000 | 1.67 s |
| CookiePal | 96 | 2.55 s | 1.70 s | 22 ms | 0.000 | 1.70 s |
| Didomi | 96 | 2.65 s | 1.68 s | 82 ms | 0.000 | 1.68 s |
| iubenda | 96 | 2.55 s | 1.78 s | 98 ms | 0.000 | 1.78 s |
| Axeptio | 94 | 2.70 s | 1.78 s | 260 ms | 0.000 | 1.68 s |
| Cookiebot | 94 | 2.70 s | 1.85 s | 105 ms | 0.000 | 1.85 s |
| Enzuzo | 92 | 3.00 s | 2.29 s | 36 ms | 0.000 | 2.29 s |
| Termly | 88 | 3.30 s | 2.54 s | 99 ms | 0.000 | 2.54 s |
To show the impact against the baseline page, we subtract the no-CMP median from each variant's median. This difference may not match the median of the differences between individual runs.
| Variant | ΔLCP | ΔFCP | ΔTBT | ΔSI | Δ score |
|---|---|---|---|---|---|
| Lawwwing | +550 ms | +740 ms | +4 ms | +770 ms | −1 |
| CookieFirst | +450 ms | +821 ms | +64 ms | +821 ms | −2 |
| UniConsent | +601 ms | +771 ms | +35 ms | +886 ms | −2 |
| CookiePal | +600 ms | +920 ms | +22 ms | +920 ms | −3 |
| Didomi | +700 ms | +905 ms | +82 ms | +905 ms | −3 |
| iubenda | +600 ms | +1000 ms | +98 ms | +1000 ms | −3 |
| Axeptio | +748 ms | +999 ms | +260 ms | +1678 ms | −5 |
| Cookiebot | +750 ms | +1070 ms | +105 ms | +1070 ms | −5 |
| Enzuzo | +1051 ms | +1514 ms | +36 ms | +1514 ms | −7 |
| Termly | +1350 ms | +1764 ms | +99 ms | +1764 ms | −11 |
Desktop comparison
On desktop, scores cluster between 99 and 100. Lawwwing reaches 100/100, with a TBT of 0 ms on the test page.
We also recorded an FCP of 0.44 s and an LCP of 0.60 s. Those are short times in this lab scenario; LCP stays below the 2.5 s threshold used as a “good” reference for field data, although a lab test does not replace that real-world measurement.
| Variant | Score | LCP | FCP | TBT | CLS | Speed Index |
|---|---|---|---|---|---|---|
| No CMP | 100 | 0.44 s | 0.21 s | 0 ms | 0.000 | 0.21 s |
| Lawwwing | 100 | 0.60 s | 0.44 s | 0 ms | 0.000 | 0.44 s |
| CookieFirst | 100 | 0.63 s | 0.44 s | 0 ms | 0.000 | 0.44 s |
| CookiePal | 100 | 0.56 s | 0.46 s | 0 ms | 0.000 | 0.46 s |
| Enzuzo | 100 | 0.69 s | 0.64 s | 0 ms | 0.000 | 0.64 s |
| iubenda | 100 | 0.56 s | 0.50 s | 11 ms | 0.000 | 0.50 s |
| UniConsent | 100 | 0.70 s | 0.45 s | 0 ms | 0.000 | 0.64 s |
| Axeptio | 99 | 0.45 s | 0.45 s | 4 ms | 0.000 | 0.47 s |
| Cookiebot | 99 | 0.77 s | 0.55 s | 0 ms | 0.000 | 0.55 s |
| Didomi | 99 | 0.78 s | 0.59 s | 6 ms | 0.000 | 0.59 s |
| Termly | 99 | 0.73 s | 0.73 s | 0 ms | 0.000 | 0.73 s |
| Variant | ΔLCP | ΔFCP | ΔTBT | ΔSI | Δ score |
|---|---|---|---|---|---|
| Lawwwing | +161 ms | +229 ms | 0 ms | +229 ms | 0 |
| CookieFirst | +190 ms | +229 ms | 0 ms | +229 ms | 0 |
| CookiePal | +120 ms | +256 ms | 0 ms | +256 ms | 0 |
| Enzuzo | +250 ms | +430 ms | 0 ms | +430 ms | 0 |
| iubenda | +120 ms | +293 ms | +11 ms | +293 ms | 0 |
| UniConsent | +262 ms | +242 ms | 0 ms | +436 ms | 0 |
| Axeptio | +10 ms | +240 ms | +4 ms | +260 ms | −1 |
| Cookiebot | +325 ms | +343 ms | 0 ms | +343 ms | −1 |
| Didomi | +340 ms | +386 ms | +6 ms | +386 ms | −1 |
| Termly | +290 ms | +518 ms | 0 ms | +518 ms | −1 |
What these results mean
With this benchmark, we wanted to measure how much work each integration adds to the same page. Lawwwing combines a score of 98/100 on mobile and 100/100 on desktop with blocking time of only 4 ms and 0 ms, respectively.
On mobile, where script cost is usually more visible, our TBT result shows very little blocking. On desktop, we reach the maximum Lighthouse score in the scenario we tested.
These measurements help us evaluate the performance of our integration, but they do not cover every possible situation. A real website can include images, fonts, analytics tools, marketing tags, and other resources that affect LCP, TBT, or CLS. We recommend measuring your own page as well, with and without Lawwwing, and complementing lab tests with real-user data when it is available.
How we ran the tests
To compare the integrations under similar conditions, we used the same test page and measured each CMP with Lighthouse 13.5.0. We also ran the tests with no CMP at all so we had a baseline.
We integrated every solution with its default configuration, with no extra optimizations or tuning. That lets us observe their behavior in this specific scenario without introducing changes that would favor any vendor.
| Condition | Setup |
|---|---|
| Tool | Lighthouse 13.5.0 |
| Baseline page | The same page, with no CMP |
| Variable | Each CMP's script and integration |
| Mobile | Median of the runs per variant across 500 runs. |
| Desktop | Median of the runs per variant across 500 runs. |
| Configuration | Default, with no extra tuning |
| Solutions tested | Lawwwing, iubenda, Cookiebot, CookieFirst, Axeptio, Termly, Enzuzo, UniConsent, CookiePal, and Didomi |
Environment and Lighthouse configuration
To keep the comparison consistent, we ran every test in the same Docker environment, using a shared HTML page for all solutions and changing only each CMP's integration.
Hardware and runtime environment
| Characteristic | Setup |
|---|---|
| Processor | Intel Core i7-7700K at 4.20 GHz |
| Cores and threads | 4 cores and 8 threads |
| RAM | 32 GB |
| Environment | Debian GNU/Linux 13 |
| Browser | Chromium 154.0.8037.57 |
| Lighthouse | 13.5.0 |
| Node.js | 22.23.3 |
| npm | 10.9.9 |
Test configuration
We used Lighthouse 13.5.0 with its default mobile settings and the official desktop preset, without manually changing the CPU or network simulation parameters.
Chromium ran in headless mode, with no GPU acceleration and no extensions.
Differences against the no-CMP page are calculated by subtracting the medians of both variants.
Although every solution was evaluated in the same environment, factors such as server load, network conditions, and the availability of external services can influence the results.
We share the benchmark scripts and configuration on GitHub so you can review our methodology and reproduce the tests in your own environment.
How to interpret the comparison
This environment lets us observe relative differences between integrations, but it does not reproduce every condition of a production website. The test page is served from a local environment, while the widgets may load resources from their vendors' servers. The network, script versions, each CMP's configuration, and the page's own resources can all influence the result.
That is why we present this data as a lab comparison, not a performance guarantee for every website. If you want to understand how the scores are calculated, see the official Lighthouse documentation.
Explore the benchmark on GitHub
We believe in transparency and want you to be able to check for yourself how we ran these tests. That is why we publish the project we used for our benchmark.
The repository includes the scripts, configuration, and test environment we used, so you can review our methodology and reproduce the measurements.
For licensing reasons, and because some CMPs require an account or a paid plan, we cannot include every vendor's integration scripts. If you want to reproduce the tests, you can clone the repository and add the corresponding snippets for each CMP.
This way, you have the same base we used in our tests so you can reproduce the benchmark and run your own comparisons.
Repository: CMP Performance Benchmark
Get started with Lawwwing
Want to see how Lawwwing performs on your own website? Our installation and configuration guides will help you get started.
Get started with LawwwingAt Lawwwing, we work to make consent management simple, without adding unnecessary complexity to your website. See how to integrate our solution and take advantage of all its features in our guides.