We’re sure that when you read the title of this post you’ll think it’s sensationalist. The good folks at WeFoster HQ are going for the BuzzFeed titles now?! All performance related tips and tricks must be covered by now.. And if it really was such a big issue there must be hundreds of articles on the web about this..

Nope.

Below is a breakdown of the symptoms, causes and cure for a serious WordPress condition we call:

Third Party Plugin Update Check Syndrome (TPPUCS™)

How do I know if my beloved WordPress Install is suffering from TPPUCS?!

Thanks for asking! To answer this question we brought in WeFoster CTO and WordPress Doctor, Bowe Frankema. He’s here to answer your burning questions about TPPUCS.

What is TPPUCS?

Third Party (Premium) Plugin Update Checks

The risk of a slow WP admin due to severe performance issues related to the (unnecessary) checking for updates of your (premium) third party plugins and themes.

Should I be worried, Dr. Bowe?

Let me explain who should be worried about this..

  • If you are running one or multiple Premium plugins or themes.
  • If you are occasionally dealing with SLOOOOOOOOOOW WordPress Admin page loads (Stage 1)
  • If you are constantly dealing with slow WP Admin page loads. (Stage 2)
  • If your WordPress Admin is not loading at all. (Stage 3).

When you recognize the above symptoms there is a high probability your installation is suffering from ThirdPartyPluginUpdateCheckSyndrome (TPPUCS™)

I never heard about this before.. I’m going to need some proof.

Sure thing! Here’s an example of an extreme case of TPPUCS (Stage 3) from one of our customers here at WeFoster.

So just to be clear, here’s what’s going on in the video.

  • When WordPress Plugin Update Checks are enabled the WordPress Admin does not load.
  • When Plugin Update Checks are disabled we get a two-second page load on a pretty heavy WooCommerce/WP installation. Sweet!

Now obviously our customer was not thrilled to see that the fastest WordPress Community Hosting on the planet (shameless link to our services, it’s our blog, we can do whatever we want!) can’t even load the WordPress Admin properly!

Sadly TPPUCS™ is completely unrelated to your host and it’s incredibly frustrating for our customers and our speed-obsessed CommunityCare team when we diagnose another community suffering from it.

So why is this happening? Can the entire WordPress Admin become unavailable by something completely outside of the control from your host?

Yup..

The Cause of TPPUCS

TPPUCS is caused by a malfunction in the WordPress central nervous system called “Render Blocking HTTP GET Requests”.

In English Please, Doctor Bowe!

Every time WordPress needs to check for updates to a plugin or theme, a request is made to an external source (a website). Most commonly this website is the super reliable, always available WordPress.org. WP.org even checks for all available updates for all your plugins/themes in one single request so usually this external request is hardly noticeable since it’s so fast!

WP.org update checks cause a slightly slower page load every 12 hours (WordPress checks for core, plugin and theme updates just twice a day).

So what’s the problem then?

For third party (commercial) WordPress plugins and themes this update check procedure can quickly dissolve into something that can absolutely kill performance for your WordPress Admin area.

Here’s a breakdown of where things go haywire….

In order to understand why TPPUCS can become a very serious issue, we’ll have to understand where things fall apart.

The WordPress Plugin Update Checker makes an external “request” to see if there is an update available for your 3rd Party plugin. It’s a bit like how we simple humans use a browser. We type in “https://puppies.com” and as a response our browser shows you a cute little doggo.

The WordPress Update Checker makes an external GET request behind the scenes (for example to https://3rdpartypluginname/update-check.php) and then waits for that page to send back a response like “Yup, Update Available” or “NOPE, Got Nothing”.

Now the problem with the above method is that this happens for every. single. third-party. plugin you have installed. Every. single. time. WordPress checks for updates.

All of these update checks are blocking. Which means they don’t run at the same time but they each have to complete before the next one can start. So if you have 10 external plugin/theme checks running and it takes about 2 seconds for the external website to respond with a “YUP” or “NO” you’re looking at 20 seconds of update checks. And during that time your WordPress Admin page will not load.

And to make things worse.. if one of those external websites is down/unavailable you’ll end up with a WordPress admin page that takes ages to load or never does at all.

Your WordPress installation is now officially suffering from TPPUCS

Give it to me straight Doc, How bad is it?

There’s three stages of TPPUCS.

Stage 1: Occasional Symptoms of TPPUCS.

This is a mild case and simply inconvenient.. WordPress checks for updates once every 12 Hours and every time it does you’ll have to wait until all of the checks have completed. This is no biggie and your WordPress installation can live a happy and fulfilling life.

Stage 2: Constant TPPUCS leading to severe slowness.

This is what we see surprisingly often and can turn your lighting-fast admin into something that you absolutely dread spending any time in.

When your WordPress site is in Stage 2 you need to take action and figure out what is causing your WordPress installation to keep checking for updates over and over again. (spoiler alert: It’s probably related to a poorly coded plugin or theme!).

Stage 3: RIP WordPress Admin

It’s possible that your WordPress Admin could become completely unavailable simply because the update check never completes. The update checker keeps waiting and waiting but the 3rd party website never responds. Because the check never completes, at a certain point your PHP process will give up and show you a white page or error message. On the next page load WordPress will run the update check again. It will keep trying and trying without ever getting anywhere…

It’s like that cutie you met once at that party, who added you on Facebook but then never acknowledged your existence ever again.

(Note: During this point in the interview Dr. Bowe falls silent and stares through the nearby window for an awkward amount of time.)

There is hope – How to (temporarily) cure TPPUCS™

If you’ve read this far chances are that your WordPress installation is affected. So where do you go from here? Below we’ve outlined a couple of ways to speed up your admin considerably.

Recommended Method – Use a Plugin To Block Update Checks

There are a couple of plugins available that allow you to block outgoing HTTP requests in the WordPress admin. By doing this the third party plugin checks will be blocked and thus you won’t be suffering from TPPUCS anymore. This is our recommended solution; simply follow the steps below to implement this.

Disable All WordPress Updates

  1. Go to Plugins > Add New and Search for “Disable All WordPress Updates”
  2. Install and Activate this plugin

You should notice an immediate improvement in WordPress Admin loading time on the next page load after you’ve enabled this plugin. We especially recommend this plugin because it only blocks plugin update and theme checks but does not seem to affect any other functionality that might be crucial to your WordPress install.

As mentioned before there are other plugins available like “AirPlane Mode” but these plugins usually block ALL outgoing HTTP requests and could break functionality on your site.

Gotcha #1 – You will not be notified of plugin, theme and core updates if you use this method.

Perfect right? Almost! Because there is one very important thing you need to keep in mind:

We recommend that you disable the Disable Update Check plugin at least twice a week to let WordPress check for plugin/theme updates.

Additionally you should subscribe to the WordPress Updates blog so you’ll be notified of important security updates.

Are You A Premium Plugin/Theme Developer? Read this..


You might not be aware that your plugin could have such a drastic impact on the performance of your customer installs, but you are obliged to make sure that your update checks are performant and scalable.
This could be as simple as caching the results of your update checks and spending just a couple of bucks a month on a proper hosting setup. We’re planning a follow-up article to further outline methods you can take as a developer to ensure that you’re not causing TPPUCS™ for your customers. Stay tuned!

Final Words – WordPress Really Needs to Address This In Core

Keeping your installation up to date and secure is no trivial thing and we understand the need for WordPress to run update checks. But we believe there is room for improvement here, such as a new core method to reliably check for updates in a non-render blocking code. For example, this could be accomplished by using JavaScript-powered ajax calls to check for updates. Obviously there are risks related to that (what happens if a plugin/theme has a JavaScript error and breaks things?) but with WordPress utilizing JavaScript more and more, we’d love to see this issue tackled sooner than later. Especially because we see many of our customer relying heavily on premium plugins and themes, and thus TPPUCS becomes more and more of an issue for us.

We’d love to hear your thoughts and suggestions in the comments below!

Tagged , ,

7 thoughts on “The Worst WordPress Performance Problem You’ve Never Heard Of – TPPUCS™

Author gravatar

Great article! This indeed is a great problem especially for a website running multiple premium plugins that perform update checks without limiting the number of checks or caching results. That is one of the reasons I decided against adding update check code to my premium plugin on Dev4Press.

Instead, I decided to create one additional plugin that will be able to check and update all my other premium plugins. To limit impact on website performance, update checks are done in the background via CRON (so no blocking calls while the page is loading), plugin includes option to set the update check frequency (default is two checks each day, just like the WordPress updater does), and all results are cached in the transient cache. The plugin has a button to trigger update check, but, plugin limits number of checks plugin can make each day. This way, both the client website and my own server are protected from the overload of too many requests.

Best regards,
Milan

    Author gravatar

    Thanks for leaving your thoughts Milan! I really like the idea of running the update check via Cron, but are you not worried about low traffic sites or heavily cached sites? In some cases this means that the cron would not be triggered for a while. I guess it’s an edge case scenario!

    Do you have your method available somewhere on Github or SVN?

      Author gravatar

      Well, WordPress own updater uses CRON, so that is the only method that makes sense and that is why I made my plugin to use CRON too, but also, I have a button in the plugin to trigger manual update checks, so it should cover the edge cases too. CRON execution should never be cached and I think that all WP cache plugins are ignoring internal CRON calls.

      As for the method used: I have a plugin on my server that is an endpoint for update checks, and Updater plugins send update check data that is somewhat similar to WordPress own update check format. The response from the server is parsed and cached, and plugins hooks into WP update code to add update information for my plugins.

      You can download the plugin from my website to see it in action (it requires Dev4Press account to activate upon installation), but I don’t plan to provide it on GitHub because I can’t provide server-side code, it is tailor made for my website.

      Milan

Author gravatar

Is there a way to test for this without installing a plugin a seeing if things get better?

    Author gravatar

    Hi Eric,

    Not really.. there are a lot of hooks/filters you’d need to disable to get rid of update checks. Your best bet is to install the plugin we recommend and enable it for just a few pageloads.

    If you are a developer you can use the “Query Monitor” plugin and look at the external HTTP requests being fired. This should also give you a good indication of how much time is spent to process external requests!

Author gravatar

Nice write up Bowe.
This is one of the reasons why we do not include the updater with individual plugin and ask our customers to use our Dashboard plugin.

Companies dealing with multiple products should go for bulk check than checking for individual items. properly integrated into WordPress update checker will avoid the point 2.

A simple solution for it in wp core will be using async http request and define an end point for listening from the update check servers. That way, you send a request and forget about it. Kind of webhook or server push but in a different context. Security will be a major issue though.

Looking forward to see what you guys are going to propose next 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *