Apps are slowing down your Shopify store

… and what can you do about it.

Shopify is one of the best ecommerce platforms in terms of load speed, this being confirmed by lots of independent studies. Even so, every day somebody is complaining on Facebook groups or in Shopify’s forum about the load speed.

Load speed is extremely important for ecommerce, there’s no question about that. Just a few quick facts:

53% of visits are likely to be abandoned if pages take longer than 3 seconds to load [Google]
BBC has seen that they lose an additional 10% of users for every additional second it takes for their site to load [WPO Stats]
Walmart saw up to a 2% increase in conversions for every 1 second of improvement in load time. Every 100ms improvment also resulted in up to a 1% increase in revenue. [Walmart]

We decided to look into slow Shopify stores, and we’ve mainly seen 2 issues:

(A) Store owners don’t optimize their product images before uploading them to Shopify; and
(B) Apps are usually the ones to blame when it comes to driving down page speed.

The first issue can be easily tackled, using tools such as Optimizilla or TinyJPG. With the later, however, the solution is not that obvious — the main culprit being “handshakes”.

Really looooong handshakes

Say you install 5 apps on your storefront. When a customer arrives on your store, there are 5 requests made to 5 different servers around the globe. Each request means a set of connections (handshakes) that take a bit of time to exchange information — and each app, depending on how well it’s built, might make more requests to download content, script files, images. Although browsers are able to parallelize requests, depending on how well apps are built and how well their servers respond, it might take a while until your store is fully loaded.


So we’ve embarked on an incredible journey, with a clear target in mind: build an app that encompasses as much of the features usually used by Shopify store owners. This is how VITALS was born, currently a 38 apps-in-one behemoth improving 20+ millions page impressions every month.

With Expansion Phase #1 completed, it’s time to publicly showcase how dramatically fast VITALS is — so we’ve tested it against some of the most installed Shopify apps ever.

How we tested everything,

  1. We’ve launched a free development store, using the Debut theme (the default Shopify theme that comes preinstalled and published on every store, also the most used theme for this reason).
  2. Imported some bogus products in order to have actual product pages to display on our test store.
  3. Used GTmetrix, a leading tool that analyzes your page’s speed performance.

In a few minutes, we had a demo product page up and running. We focused on product pages as they are the most accessed pages on stores across the world.

Our clean test store

The results offered by GTMetrix for this bare-naked Shopify store were unbelievable: 0.9 seconds for a fully loaded page. In-cre-di-ble!

Bare-naked Shopify [PDF]

We started adding apps — Facebook Chat by Beeketing (3,600+ reviews at the time of writing this article) was the first — and we actually noticed something curious when installing it:

Why would an app that merely displays something on your front store require access to your customers info and to your orders’ data?

We needed a Product Reviews app to built trust, so we decided to go with Loox Reviews (800+ reviews) and also imported some reviews from AliExpress in order to quickly get started.

Added Free Shipping Bar by Hextom (6,600+ reviews) and configured an offer of free shipping over $90.

As we’re targeting the global market :), we need a currency converter. Decided to pick the one with the most reviews — BEST currency converter (3,800+ reviews)

People’s opinion on social proof varies, but we still decided to install Sales Pop, the Shopify app with the most reviews (and probably the most installed apps of all times). Back in June 2018, Shopify unlisted all the apps that allow merchants to display “deceptive commercial practices”. Basically, apps apps that contain “false” scarcity features (such as X many customers bought this product) and “false” recent sales notifications (such as Y from Z just bought this product) were banned from Shopify — dozens of apps were removed at that time. So we knew Sales Pop won’t be the showing anything in the near future, but still wanted to see it in there.

We’re big believers in upselling, so we traveled across the app store to find solid upsell / cross-sell apps. So we settled on BOLD’s Quantity Breaks (800+ reviews) and the Frequently Bought Together app (600 reviews). We almost decided to uninstall Quantity Breaks after this message, but went ahead anyway.

That’s a bit scary, isn’t it? :)

A few minutes later, we’re done: nice website, with everything a store owner would need to get started (except products, pricing, marketing and other small issues 🤘)

Time to see the effect of installing 7 well-rated apps on a Shopify store.

Ouch! Page speed really went south… [PDF]

As you can see — almost 9 seconds added, a lot of overload.

In order to test VITALS, we started uninstalling these apps (not before exporting reviews from Loox in order to import them in VITALS and keep the test results comparable).

Five minutes later — we’re done. No more apps, but somehow we still have Loox Reviews and Quantity Breaks partially alive on the store (more on that in a moment).

Let’s test the speed again:

After removing these 7 apps, there is still some content we don’t want anymore on the page — and the load speed is more than double the initial one. That’s totally unacceptable, leftovers from apps are plaguing the stores and causing loads of issues.

And this is happening despite Shopify’s clear and straightforward recommendation - many app developers still choose to modify theme files.

Injecting HTML into theme templates is a bad thing to do for a number of reasons, for example: […] When a merchant uninstalls your app, your button will remain and they won’t know how to get rid of it (an app’s Script Tags are removed when an app is uninstalled) So, please avoid theme template updates in favor of Script Tags whenever possible.

So we installed Debut again — the store is again clean, with an exception — it turns out the product has now 3 variants, 1+, 2+ and 3+, definitely a leftover from Quantity Breaks. But lets move on. The load time is now back at 0.9 seconds, as in our initial test for a bare-naked Shopify store.

9 seconds again (just needed to re-install the original theme)

It’s time to install VITALS and quickly activate the same 7 features we previously had enabled:

  • Facebook Messenger Chat
  • Product Reviews (using the same reviews, which we imported from Loox)
  • Free Shipping Bar
  • Currency Converter
  • Recent Sales Notifications
  • Product Bundles
  • Volume Discounts

The end result? A fully loaded store again, with essentials apps:

Let’s see how VITALS performs with these 7 apps enabled:

Incredible! [PDF report]
The figures speak from themselves: a Shopify store with 7 different apps took 10.6 seconds to load. The same store with VITALS, with the same 7 features enabled, only took 2.8 seconds.
VITALS, the speedy elephant

We wanted to push the test even further — and enabled 18 more VITALS apps and tweaks:

  • Wheel of Fortune
  • Description Tabs
  • Related and Recently Viewed Products
  • Countdown Timer
  • Trust Badges and Payment Logos
  • Copyright Protection against right clicking, copy etc.
  • Quick Access Links (an improved Shopify Admin bar)
  • Sticky add-to-cart on mobile and desktop
  • Cookies Bar
  • Social Media Share buttons
  • Search Autocomplete
  • Change favicon when added to cart / Change page title when the tab is inactive / Back to top button/ Open external links in new tab

With 25 apps now active, we ran another test:

VITALS with 25 active apps [PDF report]
You read that right: extra 0.9 seconds to load another 18 apps. About 5% of a second per app. To sum it all up:

How we did it?

We could write about this for hours, but we’ll stick to the essentials:

#1 Ultra-optimized code

The apps we’ve built are currently viewed by millions. With this in mind we’re building more and better apps — having more features doesn’t necessarily mean writing more code, but writing it smarter. The code is clean, minified, lots of variables are shared among apps.

#2 Minimizing external requests

There are apps that require information from the server — so, if at least one app needs some info from us, VITALS sends out a single message combining all the requests.

In the first wave of apps installed, we had Product Bundles, Volume Discounts, Currency Converter and Product Reviews.

Each one would require some answer:

  • Product Bundles and Volume Discounts — what kind of upsell / cross-sell to show on the page, in what conditions, with what products
  • Currency Converter required the country location, in order to auto-switch (or not) the currency on the store.
  • Product Reviews needed, well, reviews — including rating and pictures.

Issuing a limited number of requests has constantly been on our minds. If you use our Trust Badges app (also available separately in Shopify’s App Store) and pick 5 badges for your store, those are inline SVG’s that are loaded together with the app, not 5 external images that need to be requested individually once the app is loaded. The same for other graphical symbols such as star ratings.

All the requests are combined in one message, all the replies are combined in another. A compact machinery with only one goal: boost your store’s speed.

#3 Three levels of caching

Every time you change a setting, your custom script is regenerated, compiled and stored on our servers, hosted on DigitalOcean (the leading cloud infrastructure provider with a 99.99% uptime SLA for all services).

When the next visitor arrives on your store, the script file is cached on Cloudflare. As Cloudflare currently routes 10% of all Internet traffic, it’s able to route traffic across the fastest paths available in real-time.

Once visitors lands on your store, the script file will be cached in their browser for 30 minutes. For each subsequent page view, the script file will load directly from his local cache, with no need to access the internet.


That’s pretty much how we did it. And this is only the first case study on how VITALS is fixing issues with Shopify apps. We’ll soon talk about how apps are not inter-operable per se, hence generating conflicts (ever seen how currency is not changed across the entire page, as the norm is apps don’t communicate with each other ?).