How do different chat widgets impact site performance?
Live chat widgets are a quick and easy way to contact support. However, adding live chat to your website will impact its performance, as the browser needs to download and run the code to display the widget.
I tested 14 different chat widgets to see how they impact page performance.
Each tool was installed on an empty test page and the page was then analyzed with Google's Lighthouse tool.
First of all, a chat widget should never slow down the main page content. Almost all tested widgets don't block rendering, as they are installed just below the closing
<body> tag. The exception here is FreshChat, which requires a render-blocking script tag in the HTML
The amount of data that each widget downloads varies significantly. LiveAgent and MyLiveChat both require less than 100KB of data, while Tawk.to fetches about 700KB.
I also looked at how long it takes to run the code that renders the widget. Zoho Desk is fastest here, fully rendering in only 200ms, while Zendesk takes almost a second of CPU time.
Finally, I looked at how soon after opening the page the chat widget became visible. For LiveAgent that's after only 2.5s, while Kayako and Zendesk both take almost 10s.
Customers clearly care about the impact that chat widgets have on their site's performance, and use Lighthouse or PageSpeed Insights to evaluate it. Apparently FreshChat grew tired of related support requests, and decided to address the problem... by detecting if the browser is running Lighthouse and serving an empty file instead of the chat widget. Sneaky! 😂
(I retested with a non-Lighthouse user agent string to get accurate data.)
Here's an overall performance comparison of the different chat widgets.
|Name||FCP||JS Time||Weight||Chat displayed|
Note: I tested Crisp, Userlike, Formilla, Tidio, Smartsupp, JivoChat, and HelpScout after writing the original blog posts. They're included in the table, but not in the charts further down.
I used the following metrics:
|FCP||First Contentful Paint, when the first normal content of the page becomes visible.|
|Weight||Total size of the downloaded data.|
|Chat displayed||How long after opening the page the chat widget becomes visible.|
In the rest of this post I'll take a more detailed look at the different chat widgets and their performance metrics.
Breakdown of additional page weight
What makes some widgets much leaner than others? LiveAgent, MyLiveChat, and Zoho Desk all delay loading most of the code until the user actually tries to open the chat widget. That makes a lot of sense, since 99% of the time users don't actually use the chat feature.
GetSiteControl just seems to be written compactly, so even after you open the chat it doesn't load much additional content.
Tawk.to's download size is dominated by a single 500KB SVG image that doesn't appear to be used anywhere. (Update: They've fixed that now!)
It's worth noting that some of these tools aren't just chat widgets. They also provide a support portal, analytics, or additional user engagement features.
The additional script parsing and execution time varies between 129ms for Zoho Desk and 820ms for Zendesk.
I took a cursory look at PureChat and Zendesk.
PureChat uses a slow custom tokenizer to display the string "Enter your info below to begin". Presumably users can customize that string to support links, block quotes, tables, etc. But maybe there could be a fast path if it's just a simple string? Also, it's not necessary to compute the final HTML until the user actually opens the chat widget.
Building complex apps is difficult. Different users need different functionality. And you want to re-use the same code and architecture to make development easier. Still, I think there's some low-hanging fruit here, like lazy loading code and checking the Chrome DevTools CPU profile for major issues.
Impact on the primary content UX
Ideally adding a live chat tool should not delay when the main content is displayed. You can see the page load characteristics without a chat widget on the left under "None".
As mentioned above, all except one chat widget don't block the initial render.
Rendering the chart also isn't affected significantly. I used blocking script tags to load the chart code, so that might mean there wasn't too much competition between the chart resources and the widget resources, even though browsers do preload resources they find further down in the document.
The image I included on the page does compete for bandwith with the chat widget. If you look at Tawk.to, which downloads over 700KB of data, it clearly does delay when the image shows up.
Overall chat widgets don't have a big impact on when your users see the primary page content. That's good, because they really shouldn't!!
Chat widgets impact page performance, requiring extra network bandwidth and increasing CPU usage. The good news is that the immediate user experience of your primary content isn't normally affected.
If you use FreshChat, and followed the official installation instructions, remove the script tag in the
<head> and put it before the init script at the end of the
<body>. It works just as well, and will fix the initial render delay.
If you're building a chat tool, consider lazy loading as much code as possible, and take a look at your widget's CPU profile to identify quick wins.