Benchmarking Elements V3: Stripe, VGS, Adyen and Braintree Compared
Table of Contents
Capturing credit card data is done virtually the same: iframe-based fields that keep the data away from the customer’s servers.
Stripe Elements, VGS Collect.js, Adyen Web Components, different names with the same job.
As we rebuilt the architecture behind our own checkout SDK, Basis Theory Elements, we benchmarked v3 against what Stripe, VGS, Adyen, and Braintree offer.
Why ‘Faster Than Before’ Isn’t the Full Story
It isn’t just that Elements v3 is 5x faster compared to v2. This was a complete rebuild of a foundational part of the Basis Theory Platform.
But it's worth being precise about what's being measured, because the metric changes the story.
An average latency figure takes every request, high and low, and finds the midpoint. That sounds useful, but it means a handful of extreme outliers, like a request from a spotty mobile connection, can pull the average away from what most users actually experience.
P95 latency solves for that. It's the threshold under which 95% of requests complete. If a system has a P95 of 100 milliseconds, that means 95% of requests finished in 100 milliseconds or less, and only 5% took longer. Because it excludes the extreme tail, P95 is a more honest picture of what a typical end user experiences on a typical connection.
That's the metric that matters most for a checkout page.
What We Measured
We measured the thing a buyer actually feels: how long until the card fields accept the input. Not when the script finishes downloading, not when the SDK reports ready. Our clock stopped when the customer could start typing.
And we have receipts.
Time to interactive, no throttling. (p50/p95)

Same measurement with a 4G profile. (9 Mbps, 60ms, RTT)
-1.png?width=2400&height=1254&name=Time%20to%20Interactive%2c%204G%20Profile%20(9%20Mbps%2c%2060%20ms%2c%20RTT)-1.png)
3G (400 Kbps, 2s RTT), where every kilobyte counts.
-1.png?width=2400&height=1254&name=Time%20to%20Interactive%2c%203G%20(400%20Kbps%2c%202%20s%20RTT)-1.png)
Against v2, v3 is more than 5x faster to interactive (736 ms → 135 ms at the median), ships 92% less over the wire (1,138 KB → 86 KB), and turns a 29.7-second slow-3G load into 5.9 seconds.
On a simulated 4G connection v3 is ready in 266 ms.
Against the competition:
- Stripe Elements: v3 is 4.4x faster to interactive, 13x smaller, and makes 7 requests to Stripe's 46.
- Braintree Hosted Fields: v3 is 13% faster at the median on a fast connection and pulls away under load: 1.5x faster on 4G, 1.6x on slow 3G. It's also 1.8x smaller, with 7 requests to Braintree's 18.
- Adyen Web Components: v3 is 2.2x faster at the median, and 6.2x faster at P95 (174 ms vs 1,083 ms). This is exactly why P95 matters: Adyen's median looks respectable, its tail doesn't.
- VGS Collect.js: v3 is 2.4x faster at both median and P95. VGS's transfer size varies between 562 KB and 763 KB on identical loads because its bundle re-downloads once per field iframe; our v3 is 86 KB every time.
v3 was fastest to interactive under every condition we measured, no throttling, 4G, and slow 3G at both the median and P95.
One honest footnote: these numbers come from controlled test conditions. Clean Chrome instances, simulated network profiles, and sandbox environments for the payment calls. Your real-world numbers will vary with device, network, and geography.
What won't vary is us continuing to invest in making Elements faster, especially on less-than-ideal connections. Being fastest on slow 3G isn't the same as being satisfied with a six-second loading time.
Migration Guide
We set out to build the fastest frontend SDK for sensitive data collection.
Based on our benchmark, we did.
The core workflow doesn't change: create an Element, mount it, tokenize it. What's different in v3 is mostly under the hood; initialization is now synchronous, a handful of Element types were renamed (cardExpirationDate is now expiry, cardVerificationCode is now cvv), and event data now lives under event.detail instead of directly on the event object.
None of it requires re-architecting your integration. Our migration guide walks through every breaking change section by section, and ends with a printable upgrade checklist so you can confirm your integration is complete before you ship anything.
If you hit something the guide doesn't cover, reach out to our team, we're glad to help you through it. Or skip straight to it, get started in the portal, and see v3 running in your own checkout today.