Skip to main content

How do different chat widgets impact site performance?

ยท 7 min read

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 21 different chat widgets to see how they impact page performance.

Each tool was installed on an empty test page and the page was then tested with Google's Lighthouse tool.

Key findingsโ€‹

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 <head> element.

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! ๐Ÿ˜‚

Freshchat returns an empty file if the user agent contains &quot;Chrome-Lighthouse&quot;

(I retested with a non-Lighthouse user agent string to get accurate data.)

Rankingโ€‹

Here's an overall performance comparison of the different chat widgets.

NameFCPJS TimeWeightChat displayed
LiveAgent1.0s309ms79KB2.5s
Zoho Desk1.0s259ms67KB3.3s
GetSiteControl1.0s315ms106KB3.1s
MyLiveChat1.0s430ms67KB5.0s
Crisp1.0s311ms155KB5.4s
Comm1001.0s295ms220KB5.4s
Userlike1.0s404ms146KB5.3s
Formilla1.0s590ms181KB5.9s
Tidio1.0s540ms208KB5.3s
LiveChat1.0s328ms385KB5.7s
Smartsupp1.0s1000ms164KB4.4s
Intercom1.0s514ms301KB5.5s
Jivochat1.0s612ms299KB5.5s
Drift1.0s441ms464KB4.8s
PureChat1.0s620ms264KB7.4
HelpScout1.0s660ms379KB6.6
Tawk.to1.0s645ms749KB3.5s
Kayako1.0s628ms364KB9.4s
Olark1.0s778ms405KB7.3s
Zendesk1.0s991ms533KB9.3s
FreshChat2.3s361ms564KB2.8s
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:

NameExplanation
FCPFirst Contentful Paint, when the first normal content of the page becomes visible.
JS TimeJavaScript execution time, how long it takes to execute the widget code.
WeightTotal size of the downloaded data.
Chat displayedHow 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โ€‹

Here's a breakdown of widget download size by resource type. Unsurprisingly, most of it is JavaScript code.

Chat widget download size broken down by resource type

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.

Breakdown of additional JavaScript timeโ€‹

The additional script parsing and execution time varies between 129ms for Zoho Desk and 820ms for Zendesk.

JavaScript execution time for different chat widgets

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.

Zendesk downloads over 500KB of JavaScript code, or 2.3MB after unzipping. Running that code will take a good amount of time, and I'm sure much of it could be lazy loaded. The bundle is a big React app, and in this case it just renders a button with a speech bubble icon and the word "Chat".

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โ€‹

In addition to testing each chat widget on an empty page, I also tested them on a page containing a JavaScript-rendered chart and a 700KB image. I used the User Timing API to capture when the chart and image are displayed.

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".

Timings for initial render, when the chart was rendered, when the image finished loading, and when the chat widget was displayed

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!!

Conclusionโ€‹

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.

Get a monthly email with web performance articles.