WooCommerce DigitalOcean Performance Review

When hosting a WooCommerce store performance is critical. The relationship between time to checkout and dollars earned is direct and measurable. In this article we’re going to take a look at WooCommerce DigitalOcean performance and see if we can draw any conclusions. Our hope is that with the load testing runs we’ve done on RoboSwarm you’ll be able to make an informed decision around hosting your WooCommerce store.

Want to test your own WooCommerce performance? Sign up for RoboSwarm!

What are we testing?

Performance and load testing WooCommerce is an interesting problem. You need to have session handling between requests and be able to submit CSRF tokens. RoboSwarm is able to do proper WooCommerce load testing with adding items to your cart, viewing your cart, and checking out. The metrics we care about are:

  • WooCommerce Checkout Performance – Your customers checking out is where money is made. Performance of checkout is arguably the most important measure we can make.
  • Overall WooCommerce Performance – While checkouts are important, your store’s general performance also plays a big part in getting customers to purchase items.
Screenshot of RoboSwarm.dev home page.

How are we testing?

In order to get a good understanding of WooCommerce performance on DigitalOcean, each virtual user goes through the following scenario on repeat:

  1. Go to the store main page.
  2. Go to product 1, add to cart.
  3. Go to product 2, add to cart.
  4. Go to product 3, add to cart.
  5. Go to cart.
  6. Checkout
  7. Load checkout success page.

While more direct than most users, its fairly representative of how customers shop (add a few items, view the cart, checkout). As far as the tests we ran, each test was 200 concurrent virtual users, for 45 minutes, with traffic being generated in DigitalOcean’s San Francisco 2 data center and targeting their New York City 3 data center. As far as what DigitalOcean machine configurations we tested:

  • Standard: 1vCPU, 1GB RAM
  • Standard: 2vCPU, 2GB RAM
  • Standard: 4vCPU, 8GB RAM
  • Standard: 8vCPU, 16GB RAM
  • CPU Optimized: 2vCPU, 4GB RAM
  • CPU Optimized: 4vCPU, 8GB RAM
  • CPU Optimized: 8vCPU, 16GB RAM

We tested each machine twice. Once with caching disabled and again with caching enabled via W3 Total Cache.

The tech stack powering WooCommerce is:

  • Ubuntu 20.04
  • PHP-FPM 7.4.3
  • MySQL 10.3
  • Nginx 1.18
  • W3 Total Cache backed by Memcached. All pages except cart and checkout are full-page cached.

WooCommerce DigitalOcean Checkout Performance

The table below represents the sum of the data from all of our test runs. Before we go into each category in depth, it’s worth calling out some interesting data points.

  • As checkout throughput increased, the response time distribution and average/median response times actually increased. Meaning raw checkouts per second was higher but response time was slower.
  • WooCommerce is really slow if you don’t have at least 2 vCPUs.
  • DigitalOcean’s CPU optimized droplets didn’t provide much in the way of performance increases over their standard droplets.
Checkouts Per SecondAvg Response TimeMedian Response TimeP50P90P99
Standard: 1vCPU, 1GB RAM0.1751611816000160002500027000
Standard: 1vCPU, 1GB RAM [CACHED]0.5881786017000170002700033000
Standard: 2vCPU, 2GB RAM1.175620058026200890014000
Standard: 2vCPU, 2GB RAM [CACHED]1.588788200799882001100012000
Standard: 4vCPU, 8GB RAM2.67635003429350049006500
Standard: 4vCPU, 8GB RAM [CACHED]3.17347004689470059006800
Standard: 8vCPU, 16GB RAM4.01241003986410050005700
Standard: 8vCPU, 16GB RAM [CACHED]6.64226142600260034004300
CPU Optimized: 2vCPU, 4GB0.747866210000100001400015000
CPU Optimized: 2vCPU, 4GB [CACHED]1.3869411920093001300014000
CPU Optimized: 4vCPU, 8GB2.54341454500450052005800
CPU Optimized: 4vCPU, 8GB [CACHED]3.3246124600460061007500
CPU Optimized: 8vCPU, 16GB4.65435083600308545005200
CPU Optimized: 8vCPU, 16GB [CACHED]5.1944294200420069008900
All times in milliseconds

Checkouts per Second

Checkouts per second across all 7 droplet types.
Checkouts per Second

The checkouts per second metric for WooCommerce performance is likely the most important metric that we have. You can see that in un-cached scenarios WooCommerce and WordPress do pretty terrible. Once your throw a bit of caching in though things become a little more reasonable from a throughput perspective. As an example, if you were processing $50 orders, the table below shows you the maximum number of dollars your could make in a given minute, hour, or day.

MINUTEHOURDAY
1vCPU/1GB [CACHED]$1,764$105,840$2,540,160
2vCPU/2GB [CACHED]$4,764$285,840$6,860,160
4vCPU/8GB [CACHED]$9,519$571,140$13,707,360
8vCPU/16GB [CACHED]$19,926$1,195,560$28,693,440
Unrealistic

Being realistic, this is a very unlikely scenario. But it does illustrate a point: The amount of money you pay for your WooCommerce hosting can directly impact the bottom line of your business. Are you going to be processing 6.642 orders per second? Probably not. But traffic might spike at some point, and you don’t want to turn away anyone because your performance is terrible.

Checkout Average Response Time

WooCommerce DigitalOcean checkout response time
Average Response Time

In the scenario above, having a lower number is better. As you can see the cheapest DigitalOcean droplet has really bad performance when under heavy load. A checkout taking 17s on average is really not a great experience. Things improve quite a bit as you go into the more expensive tier droplets, but I personally wouldn’t be happy until I got below 5s.

An interesting point in the data above is that in most cases the cached performance is worse than the un-cached performance. Why though? Because in the cached scenario the throughput is higher.

Response Time Distribution

The final metric for checkouts we’re going to look at is response time distribution. What does that mean? It basically means that we’re going to look at 50%, 90%, and 99% of requests and see how fast they finish. For example if the 90% distribution is 2000ms, that means that 90% of requests finished in 2000ms or under.

Response Time Distribution: CPU Optimized 4vCPU, 8GB RAM

Image 6 of 7

If you go through the gallery above and focus on the 50% and 99% numbers, you can see that there is quite a wide range of experiences your customers will have. Ideally we want to see the 50% and 99% number a lot closer together and low, because this indicates that the response time for all customers is similar.

Want to test your own WooCommerce performance? Sign up for RoboSwarm!

Overall WooCommerce DigitalOcean Performance

Now that we’ve looked specifically at checkout performance, lets take a broader look at the overall performance. For this section, we’re going to focus exclusively on the 4 vCPU / 8GB RAM cached variant of the test.

Overall store performance wasn’t too bad with caching enabled. The cache was able to handle the vast majority of the pages, with checkout and cart pages being the exception.

WooCommerce DigitalOcean overall requests per second.
Requests / Failures per Second

You can see that as the user load went up the request throughput managed to stay roughly the same, fielding ~40 req/s on average. We didn’t see any errors in this scenario either.

WooCommerce DigitalOcean overall average and median response time.
Average & Median Response Time

The average and median response time under full load was around 3.9s. Both times mirrored each other closely, which indicates that we didn’t have too many outliers skewing the average time. In general this is a good thing because we want performance to be consistent and we don’t want outliers in the high range of response times.

WooCommerce DigitalOcean overall response time distribution
Response time distribution

The overall response time distribution wasn’t too bad. 50% of requests finished in under 4s, and 99% finished in under 8s. If this were a normal “read only” WordPress site these numbers would be awful, but given the amount of requests that must be un-cached, it isn’t too bad at all.

Conclusions

With WordPress it is often the case that you can get away with a cheap $5/month host & some caching. With WordPress + WooCommerce that isn’t true. Because of the routes that aren’t cache-able you need some more horsepower to give your customers a decent experience. Our opinion is that if you are hosting a WooCommerce store on DigitalOcean, be sure to run it on a Droplet with at least 2 vCPUs. Whether you go further than that depends on the typical traffic levels on your store.

Want to test your own WooCommerce performance? Sign up for RoboSwarm!