WordPress themes and plugins: what slows a site

Themes and plugins decide most of a WordPress site's speed. How core loads their files, how to find the heavy ones, and how to remove, limit or replace them.

IntermediateHow-to7 min readUpdated October 30, 2026

In this guide
  1. Why they matter most
  2. What core does to help
  3. Step 1: measure on a copy
  4. Step 2: list what each plugin and the theme add
    1. Turn them off one at a time
  5. What the numbers mean
  6. Choosing a theme
  7. Choosing and judging plugins
  8. Fixes, in order
  9. Mistakes to avoid
  10. Check your own page
  11. Sources

Why they matter most

WordPress core is small compared with what is added to it. The WordPress Advanced Administration Handbook says a theme has a huge impact on performance, and a fast lightweight theme performs much more efficiently than a heavy, graphic-laden one. It says the same about plugins, and that deactivating and deleting unnecessary ones is a significant way to improve performance.

The 2025 Web Almanac points the same way. Its CMS chapter reports that WordPress sites span a wide range of results, and that the differences come from configuration more than from core limits.

A theme or plugin can cost speed in two places:

The two are separate. A plugin can be light in the browser and heavy on the server, or the other way round.

What core does to help

Recent WordPress versions have features that reduce the cost, as long as the theme or plugin takes part. These come from the core source:

These help only when the theme or plugin uses them. Most of the work below is finding the ones that do not.

Step 1: measure on a copy

Do the testing on a staging copy, or at a quiet hour. Use three pages: the home page, a typical post or product page, and a page with a form.

For each, record the same things before you change anything:

Change one thing at a time, then measure again.

Step 2: list what each plugin and the theme add

WordPress prints files with their origin in the address. A plugin's files live under /wp-content/plugins/<plugin name>/, and the theme's under /wp-content/themes/<theme name>/. That makes them easy to group.

  1. Open the page, open DevTools, and go to the Network panel.
  2. Reload and type plugins in the filter box. Note the plugin names, how many files each adds, and their sizes. Then type themes.
  3. Open Coverage (see unused code) to see how much of each file ran.
  4. Repeat on a page where the plugin's feature is not used. A contact form plugin that loads its files on a page with no form is a typical finding.

On the server side, WordPress can save every database query when SAVEQUERIES is set to true, as the handbook's wp-config page explains. Tools can use this record to show which function ran each query. Use them on a copy, not on the live site.

Turn them off one at a time

The handbook suggests selectively disabling plugins to measure their effect. On the copy, deactivate one plugin, measure the three pages, reactivate it, and move to the next. Keep a table. A plugin that adds 300 milliseconds to the server response, or a megabyte of script, stands out at once.

Watch for dependencies. Some plugins need others, and switching one off can hide the real cost or break a page. Look at the page, not only at the numbers.

What the numbers mean

What you seeLikely causeWhat to do
Many files from one plugin on every pageThe plugin loads its assets sitewideLook for a setting to load only where used. If there is none, limit it with code or replace it.
A slow server response on only some pagesA plugin that runs queries or calls other servers on those pagesDisable it on the copy and compare. Ask the plugin's developer about the query.
A very large page structureA page builder, or a theme with many wrapper elementsSee page builders and the DOM size guide
Large JavaScript from sliders, animations or pop-upsFeatures you use once, loaded everywhereRemove, simplify, or load only on the pages that use them
Several font filesA theme and plugins each loading fonts or icon setsReduce the families and weights. See web fonts
jQuery and its plugins everywhereOlder plugins that depend on itSee removing jQuery before you try to change it

Choosing a theme

Choosing and judging plugins

A plugin deserves its place when:

A plugin that fails these tests may still be worth keeping. The question is whether the feature is worth the cost, and whether a lighter route exists. A native block, a few lines in a child theme or a smaller plugin often does the same job.

Fixes, in order

  1. Delete what is inactive or unused. An inactive plugin does not run, but it is still code to maintain and secure.
  2. Replace the heavy ones. Choose a lighter plugin or a core feature.
  3. Configure. Switch off modules and features you do not use inside large plugins.
  4. Limit to the pages that need it. Some plugins and performance plugins can stop a file from loading on selected pages. In code, use the hook that prints assets and the conditional functions, such as is_page() or has_block().
  5. Load the rest late. Use defer or async, and the footer.
  6. Update. Keep core, the theme and plugins current, as the handbook advises, and keep PHP current too.

Here is the code version of step 4. The handle is shown in the page source, because WordPress prints scripts with the id <handle>-js and styles with <handle>-css:

add_action( 'wp_enqueue_scripts', function () {
	if ( ! is_page( 'contact' ) ) {
		wp_dequeue_script( 'contact-form-plugin' );
		wp_dequeue_style( 'contact-form-plugin' );
	}
}, 100 );

And for your own script, ask for defer and the footer:

wp_enqueue_script(
	'my-widget',
	get_stylesheet_directory_uri() . '/js/widget.js',
	array(),
	'1.0.0',
	array(
		'strategy'  => 'defer',
		'in_footer' => true,
	)
);

Dequeuing can break a feature that depends on the file, such as a form that needs its script. Test the page after each change. If you are not comfortable with code, use a plugin built to unload assets, or ask a developer.

Mistakes to avoid

Check your own page

Run the free audit and look at Reduce unused JavaScript, Reduce unused CSS and 3rd parties. Match each large file to a plugin by its address. Start with the biggest one that is loaded on a page that does not need it.

Sources

Start here

Free website audit

Live Google data for any public page: mobile and desktop.

Mobile + desktop · Lighthouse lab test · Real-user Chrome data when Google has it

Rather have this done for you? WordPress speed · Book a call

Related guides

All guides →