You might use an A/B testing library like Google Optimize, VWO or Optimizely. Most of the time, these are added to the site using client-side JavaScript. The page loads, the A/B testing JavaScript loads and then it sets it's experiment - maybe it changes your headline from "The Fastest Electric Car" to "Over 350 Mile Range on One Charge".
But there's a drawback to the client-side JavaScript version here: in some cases, the user might see the original headline, and then see that suddenly switch over to the new headline after the A/B testing JavaScript has loaded.
To get around that, A/B testing tools developed anti-flicker snippets. The Google Optimize code, for example, looks like this:
<style>.async-hide { opacity: 0 !important} </style>
<script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
(a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
})(window,document.documentElement,'async-hide','dataLayer',4000,
{'GTM-XXXXXX':true,'GTM-YYYYYY':true});</script>
This works by adding opacity: 0
to the entire page - which shows the user a blank white screen - until either the test has loaded, or (in the example above) 4 seconds have passed, whichever is soonest.
It's worth noting that Google recommends a page needs to have a Largest Contentful Paint of 2.5 seconds or less in order to pass the Core Web Vitals - which is at odds with the anti-flicker snippet method of hiding the page for up to 4 seconds.
What does this look like?
Here's a side-by-side video (tested on a fast 3G connection) of Rightmove's website, which uses the Google Optimize anti-flicker snippet - compared with another version where I've removed the anti-flicker snippet.
It all happens very quickly, but the before version (with the anti-flicker snippet) starts rendering 5.1 seconds into the page load, while the after version starts rendering at 4.1 seconds. The anti-flicker snippet delayed rendering by a full second.
It can also have an impact on metrics like Largest Contentful Paint - the before version had an LCP of 5.1 seconds, and after removing the anti-flicker snippet, the LCP dropped to 4.5 seconds.
What should you do instead?
There's no simple answer to this - and there will have to be a compromise or trade-off somewhere. The ideal is to use a server-side A/B testing method instead - something that is supported by Google Optimize. The downside is that this is very complicated, and requires developer help.
Other options include at least reducing the timeout on the anti-flicker snippet from 4,000 ms to 2,500ms at most (given that LCP needs to occur within 2.5 seconds to be considered a pass by Google).
My personal preference is that the anti-flicker snippet is removed completely, although of course this can result in the visitor seeing the control switch to the experiment.
Andy Davies has written a really useful post on the impact that anti-flicker snippets can have on web performance, which you might find helpful when exploring other alternatives.