In our lives, it can be hard to switch modes. When I was a student, attempting to survive on a ridiculously tight budget, I developed frugal habits. I would buy my groceries in three different supermarkets, each of which happened to be cheaper for particular items. It saved me about 20% but took twice as long as shopping in just one supermarket. At that point in my life, trading time for money was a worthwhile exchange.
Years later, however, when I was working and earning good money, I still had the habit of shopping around and finding the best bargain, even though the time I wasted was now more valuable than the money I saved. I was stuck in a student mentality that was no longer appropriate. I had failed to switch modes.
Many people who now make a good living from WordPress initially got into it because it was free and had an active, dynamic eco-system of plugins and themes which were also free. There was no financial barrier to entry and, once we started working for clients, those early clients were just as excited as we were about it being free.
WordPress has just turned 15, and a lot has changed over those years. The momentum of those early years grew and grew, beyond anything any of us could have imagined. WordPress became an industry standard and even major clients no longer react oddly if you suggest they use it. It has become more capable and now runs at the heart of sites doing incredibly complicated things.
The explosion of WordPress e-commerce has been the biggest surprise, with a staggering 42% of all online stores now using WooCommerce, dwarfing fellow Open Source competitor Magento at 4%, and hosted, heavily marketed competitor Shopify at 7%.
The impact of WooCommerce on people making their living from WordPress has been profound. People who had built a reasonably good living around building regular WordPress sites suddenly found themselves in prime position to make far more money building online stores, either for clients or for themselves.
With the full force of new owner Automattic (owner of WordPress.com) behind it, we can expect WooCommerce to continue growing, but there is one elephant in the shopping basket which we must acknowledge.
WooCommerce is more than just its code, more than just the team that makes it, more even than the thousands of coders and designers who produce third-party plugins for it. WooCommerce is also the millions of people who use it to make their online stores or to implement them for clients. WooCommerce is you.
The decisions made by we end-users of WooCommerce have an impact on whether it can continue to grow in the face of fierce competition from rivals. Looking at most WooCommerce sites today, it is clear that many WordPress professionals are still using the same sort of cheap, substandard hosting that was passable for regular WordPress sites but is simply unsuited to the far greater demands of e-Commerce.
Even though they are now earning more money than before, and even though it is clear to everyone that performance is vital in the case of e-commerce, most site developers have not yet made the mental jump to accepting that they need not just better hosting but hosting that is specifically optimized for WooCommerce.
WooCommerce is a Different Beast
Compared to static HTML pages, WordPress itself is relatively resource-intensive. Even on a new install of WordPress without any additional plugins installed, creating the home page requires 27 queries to the database. Even additional page component requires additional queries, so, it would not be unusual to see a page pulling 60 or 70 queries per page load.
Luckily, this burden can be reduced somewhat by caching the pages once they have been constructed once, meaning that subsequent visits to the same page within a certain time period do not need to repeat the same queries.
Any form of e-commerce is going to be massively more resource-intensive. Typically, a single product will require around 60 database queries, while tracking the actions of the user requires even more. Databases tend to balloon in size when used for e-commerce because there are so many details per product and per customer. The bigger the database, the more time it takes to complete queries.
Worst of all, you cannot cache e-commerce in the same way you can to regular content sites. It is vital that all the information being displayed to the visitor is up to date, the store owner could get into an awful mess if the product pages are displaying cached versions of the price or stock availability. You certainly cannot use a cached version of the shopping basket, customers would get upset if the product they thought they were buying does not show up there. E-commerce is unavoidably more dynamic than regular content sites.
So, in comparison to a WordPress site used for content alone, a WordPress e-commerce site will be, absolutely, a beast. No matter what the hosts say, it is not a good match for regular WordPress hosting accounts which have evolved over the past decade or so to cater to regular content sites with as few resources as they can get away with.
It is not entirely the hosts’ fault. We have come to expect to pay a certain amount of money for “WordPress hosting” and, in our minds, such hosting should be able to handle any WordPress theme or plugin. So, yes, the hosts have learned to highlight WooCommerce as one of the possible uses of the accounts they sell.
We want to believe that a $30 managed WordPress hosting account is going to be enough – I mean, seriously, $30 per month is a significant amount of money, right? – but we end up screwing ourselves or our clients. When a regular content site has insufficient resources, your pages load more slowly and, sure, a few visitors might be frustrated enough to leave, but it is not the end of the world.
In the case of e-commerce, however, you are trying to convert the visitor into a customer by moving them along a particular path. Slow page loads will undoubtedly give the potential customer time to rethink their purchase but the real worry is that the resource squeeze will affect the actual transaction which is, itself, a resource-intensive operation. If a customer has entered their credit card details and is then confronted with a page error, well, you have probably lost that sale for good.
The Sticky Problem of The Database Schema
Every application uses its database in a certain way. When you install WordPress, it sets out a specific table structure that the creators of WordPress feel is well-suited to the queries that a typical WordPress site will receive. The particular layout an application uses is called its database schema.
On a recent episode Mastermind.FM podcast (Episode 93 – Pippin Williamson on the Why, When and How of Easy Digital Downloads 3.0), Pippin Williamson, the maker of another major WordPress e-commerce platform, Easy Digital Downloads, talked about how, when he originally created it years ago, the general consensus was that all WordPress plugins should use the existing WordPress database schema.
Over the years that followed, and after many thousand support tickets, Pippin came to the realization that the WordPress database scheme is simply not suited to e-commerce. He had to make the painful but necessary decision to completely overhaul his product’s internals to use a new database scheme, one more suited to the needs of e-commerce.
Overhauling a popular plugin that so many people have built their businesses upon is no simple matter. He started by rewriting just one add-on, their Software Licensing add-on, introducing entirely new tables. This significantly improved performance and added greater flexibility and control for future enhancements.
That level of improvement is necessary if WooCommerce is to remain dominant. WooCommerce 3.0 did introduce CRUD (Create, Read, Update and Delete) interfaces to unify the way in which WooCommerce data is stored and retrieved, but orders are still stored as custom post types. This means that a single order will create 40 post meta entries, meaning 40 new database rows. If you have even a dozen or so order per day, your database will rapidly balloon to a ridiculous size.
To give you a sense of just how unwieldy the regular WordPress database schema is, many larger WooCommerce stores use a separate product called Glew to handle the product analytics they need to see which products and bundles are doing well. In theory, you can search for this information directly in WooCommerce but it is incredibly slow.
The creator of Glew realized that it made more sense to create an entirely separate Laravel application, with an optimized database scheme, to store the same information and construct reports far more quickly.
The team behind Liquid Web Managed WooCommerce Hosting are widely recognized to be leading the way by introducing their own custom modification to the WooCommerce database schema. They are sharing the fruits of their efforts with the WooCommerce community as a whole. For instance, they have made their WooCommerce Custom Orders Table modification available to everyone, for free, on Github.
If you are accustomed to paying for regular WordPress hosting, the Liquid Web WooCommerce hosting plans are eye-wateringly expensive: they start at $152, but this the sort of level we need to be thinking of for adequately resourced, expertly customized and properly managed WooCommerce.
The Reality of WooCommerce Hosting Today
Hopefully, in time, we will see other hosts adopt and improve upon these innovations, while also increasing the resources they make available to their customers, and this should increase the options and lower the prices for suitable WooCommerce hosting quite a bit, but, right now, we have to be realistic about what is available to us today.
All of us in the self-hosted e-commerce industry need to make this shift to understanding that, if we want to compete with hosted solutions such as Shopify, we need to stop hobbling our efforts. We need to make a mental break from hosting that is designed to do something else, hosting that is sold to us as suitable but that, in reality, falls apart once your site starts attracting moderate traffic.
In how we present WooCommerce to our prospective clients, we must resist the temptation to fall back upon the easy message that “WooCommerce is good because it is cheap” and, instead, focus on the more important, long-term advantages of control and customizability. We must be honest – to ourselves as much as our clients – that a serious online store, with significant traffic and a real business behind it, is ultimately going to require hosting that costs at least as much as the hosted alternatives.
Of course, there is also the option of running your own dedicated server and committing yourself to keeping up with the latest advances in WooCommerce database customization, but that does require a substantial amount of server admin and coding experience. As someone who has spent two decades managing my own servers, that is indeed a tempting thought but, when I add up all the time it would take, it quickly becomes apparent that it would be a false economy.
Again, I hope that properly resourced, customized and managed WooCommerce hosting will become less expensive over the coming years but, right now, if I had to set up a new online store, I would bite the bullet and pay for Liquid Web Managed WooCommerce hosting.
The great thing about WP Mayor is our readers. The WordPress community is extraordinarily varied, with people doing every imaginable thing at every level, and the comments they post here reflect that range of experience.
Some of you have already encountered the problems mentioned in this article and, I am sure, have come up with perspectives and solutions that would be helpful.
We would love to hear about your experiences with hosting for online stores, where that be with WooCommerce or Easy Digital Downloads or any other WordPress plugin, or even your experience with hosted online stores such as Shopify or SquareSpace or any provider.
Thanks Madeline and best of luck with your WooCommerce site.
Thanks for this blog post. This was quite helpful for me while developing the website.
The database schema in WooCommerce is far from optimal, but changing the order structure will reduce compatibility with other Woo/WP plugins (hence, give you new headaches) and it does not address the key problem with WooCommerce and the database. Custom order tables may solve server side hosting challenges at scale when having many transactions, or processing many orders – but it will not improve the overall page speed of a WooCommerce shop.
The most effective way of speeding up WooCommerce (all parts of it) is to increase the database performance. The advantage of having better performing databases outpaces any other performance enhancements, because every page request (both frontend and backend) will be way faster.
In practice a WooCommerce site with a few plugins can easily produce pages with hundreds of database queries on a single page load (category pages, or a bunch of relevant products etc). When using faster databases, this works fine if one makes sure that the queries properly use indexes.
A WooCommerce running on hosting with fast databases usually moves the bottleneck to PHP. This makes performance issues much easier to address for the average developer (most developers do not have hard core SQL skills).
WooCommerce can be lightning fast on good hosting and built right, check out https://bogartstore.no as an example (hosted in Norway, without CDN). This site is running without full page caching or object caching (so just plain PHP + MariaDB).
Thanks for the thoughtful contribution Erlend.
When you say faster databases, do you mean amply-resourced servers with SSD and lots of RAM?
Perhaps the ultimate solution would be a combination of fast hardware and the sort of customizations being worked on by Liquid Web.
I accept your point that such customizations could potentially break compatibility with extensions and plugins, there is no doubt a ton of work to be done in this area.
Faster database performance is not just about beefy hardware, although I’d say SSDs and enough RAM is a base requirement for any database server. To achieve faster database performance it is a requirement that WordPress and WooCommerce uses the database the right way.
An obvious example of wrong/poor use of the WordPress database is the lack of an index on the autoload field in wp_options (see https://core.trac.wordpress.org/ticket/24044). Without this database index, every page load will make the database do full table scan to find the relevant rows. The options table tends to grow quite large with WooCommerce, and the larger it gets – the slower this specific query will perform. With an index, however – the performance of this query is very close to fixed (and super fast).
I also strongly believe in keeping things simple. It less intrusive to make sure the database queries perform like they should, instead of adding higher level workarounds (factoring out one piece of the core, install more plugins, add caching etc). By keeping a steady focus on the parts of the stack (db + webserver + wp + plugins) that affect every page load – developers will have to work a lot less to achieve good WooCommerce performance.
Thank you Erlende, some terrific advice there for anyone seeking high performance from any type of WordPress site, not just WooCommerce.
Great List. I have now bookmarked it so that I can keep referring back to it when writing certain blog posts and articles. Thank you.
Thanks for the kind words Shaksi.
Hi Numan, thanks for taking the time to comment.
Hostgator is primarily a marketing operation which sells low-capacity shared hosting to customers who lack technical knowledge. Their hosting is suited to simple websites with low-traffic. Such hosting is simply not designed for the demands of a moderately busy online store and, to give credit to Hostgator, they do not market their hosting as being suited to WooCommerce.
You can, of course, install WooCommerce on shared hosting and it might even perform reasonably well during testing i.e. when you, the site creator, are the only visitor. What really matters, however, is how the site performs when you have multiple visitors at the same time, and they start to carry out more complex actions such as placing products in their baskets and attempting to pay for them.
With basic shared hosting, it is unlikely that you will ever know that there is a problem. The vast majority of potential customers who experience problems will never bother to contact the site owner and let you know that they were unable to complete their transaction. You will simply think that your store works but you have no customers.
If your budget is very limited, it might make more sense to learn how to install WordPress on a VPS that costs roughly the same as you pay Hostgator, you will get far more resources for your money and, also, you won’t be wasting any resources on cPanel.
If, on the other hand, you are working for a client, and that client expects to have a busy online store, it might be a good idea to sit down with them and explain the reality that e-commerce is resource intensive. In the long run, your client will probably make more money by using more expensive hosting that is specifically designed for WooCommerce.
Good luck with your project!
Hi Matt, thanks for taking the time to comment. Just in the interests of clarity, we should disclose that you are a product manager at Ecwid.
The hybrid model you suggest is certainly valid, and I would agree that any serious e-commerce developer/integrator should familiarize themselves with such options, including Ecwid.
In a sense, a hybrid approach might be a more viable alternative for users who are already inclined to opt for a hosted solution, such as Shopify, rather than the people who are drawn towards WooCommerce.
The main argument for WooCommerce is that it gives you more precise control over the shopping experience, and opens up all the possibilities offered by the ecosystem of extensions or, even, the ability to get a custom extension written to do precisely what you want.
I am aware of, but not familiar enough with Ecwid to know how close it comes to providing that flexibility, but there are doubtless situations in which it would provide everything the client needs.
Donnacha, thanks for the response. I am sorry I forgot to mention I am from Ecwid. I had no intention to hide it — in fact, I thought the “website” field in the comment posting form would expose it =)
1) Absolutely agree on the extensions part — Ecwid does have a dedicated extensions directory as well (about 150 addons), but the number of plugins made specifically for Woo is huge.
2) As to custom development options, it always comes to the APIs a solution provides. If API is flexible enough, everything is possible. From this standpoint, Ecwid can provide the same amount of customization options as Woo does — the APIs are in place to customize any store in any way.
Thanks Matt, I had not realized that Ecwid is that flexible, I will certainly try to learn more about it in the future.
Thanks for the article!
You mentioned two approaches — WordPress plugin / Hosted e-commerce solution. I’d recommend also considering a “hybrid” one: hosted shopping cart with storefront in WordPress. So, all your products and sales are stored in cloud (automatic infrastructure scaling, backups, updates, maintenance), while your storefront is displayed on your WordPress site where you can add/remove widgets, customize appearance, add products/categories to different WordPress pages etc. This way you’re not that dependant on the hosting you are using — the service provider stores your data and scales automatically when needed. Traffic to the site is still important though — if you have a lot of visits, a cheap hosting can be a bottle neck.
Try Ecwid (http://wordpress.org/plugins/ecwid-shopping-cart/) — it’s using the WordPress+SaaS approach I just described. And it’s way cheaper than most premium hostings.
The information you have published in your blog is really useful and I will apply this useful information to the seo studies of my own website and blog page. It’s a pleasure to take advantage of this useful information on your blog page. Thank you.
Thanks for taking the time to comment Bursa.
Excellent in-depth article. Yes, if the site is big with lots of sales, $249+ a month isn’t that much, especially if it means few if any performance worries and issue.
Absolutely. We can find the idea of paying that much for anything hard to swallow but I guess this is one situation in which trying to save the client money can end up costing more and causing a lot of stress.
Bundle of thank bro, you to give me helpful guide.
Very amazing and useful content blog.
Thanks for the kind words Faisal.