wp-performance

Perfilado y optimización de rendimiento de WordPress solo en el backend utilizando WP-CLI, Query Monitor y diagnósticos específicos. Detecta y mide cuellos de botella de rendimiento mediante los comandos doctor/profile de WP-CLI, cabeceras Server-Timing e integración con la API REST de Query Monitor sin requerir acceso al navegador. Cubre cinco categorías de optimización: reducción de consultas a la base de datos, limpieza de opciones cargadas automáticamente, configuración de caché de objetos, optimización de tareas cron y gestión de llamadas HTTP remotas. Incluye verificación segura...

npx skills add https://github.com/wordpress/agent-skills --skill wp-performance

WP Performance (backend-only)

When to use

Use this skill when:

  • a WordPress site/page/endpoint is slow (frontend TTFB, admin, REST, WP-Cron)
  • you need a profiling plan and tooling recommendations (WP-CLI profile/doctor, Query Monitor, Xdebug/XHProf, APMs)
  • you’re optimizing DB queries, autoloaded options, object caching, cron tasks, or remote HTTP calls

This skill assumes the agent cannot use a browser UI. Prefer WP-CLI, logs, and HTTP requests.

Inputs required

  • Environment and safety: dev/staging/prod, any restrictions (no writes, no plugin installs).
  • How to target the install:
    • WP root --path=<path>
    • (multisite/site targeting) --url=<url>
  • The performance symptom and scope:
    • which URL/REST route/admin screen
    • when it happens (always vs sporadic; logged-in vs logged-out)

Procedure

0) Guardrails: measure first, avoid risky ops

  1. Confirm whether you may run write operations (plugin installs, config changes, cache flush).
  2. Pick a reproducible target (URL or REST route) and capture a baseline:
    • TTFB/time with curl if possible
    • WP-CLI profiling if available

Read:

  • references/measurement.md

1) Generate a backend-only performance report (deterministic)

Run:

  • node skills/wp-performance/scripts/perf_inspect.mjs --path=<path> [--url=<url>]

This detects:

  • WP-CLI availability and core version
  • whether wp doctor / wp profile are available
  • autoloaded options size (if possible)
  • object-cache drop-in presence

2) Fast wins: run diagnostics before deep profiling

If you have WP-CLI access, prefer:

  • wp doctor check

It catches common production foot-guns (autoload bloat, SAVEQUERIES/WP_DEBUG, plugin counts, updates).

Read:

  • references/wp-cli-doctor.md

3) Deep profiling (no browser required)

Preferred order:

  1. wp profile stage to see where time goes (bootstrap/main_query/template).
  2. wp profile hook (optionally with --url=) to find slow hooks/callbacks.
  3. wp profile eval for targeted code paths.

Read:

  • references/wp-cli-profile.md

4) Query Monitor (backend-only usage)

Query Monitor is normally UI-driven, but it can be used headlessly via REST API response headers and _envelope responses:

  • Authenticate (nonce or Application Password).
  • Request REST responses and inspect headers (x-qm-*) and/or the qm property when using ?_envelope.

Read:

  • references/query-monitor-headless.md

5) Fix by category (choose the dominant bottleneck)

Use the profile output to pick one primary bottleneck category:

  • DB queries → reduce query count, fix N+1 patterns, improve indexes, avoid expensive meta queries.
    • references/database.md
  • Autoloaded options → identify the biggest autoloaded options and stop autoloading large blobs.
    • references/autoload-options.md
  • Object cache misses → introduce caching or fix cache key/group usage; add persistent object cache where appropriate.
    • references/object-cache.md
  • Remote HTTP calls → add timeouts, caching, batching; avoid calling remote APIs on every request.
    • references/http-api.md
  • Cron → reduce due-now spikes, de-duplicate events, move heavy tasks out of request paths.
    • references/cron.md

6) Verify (repeat the same measurement)

  • Re-run the same wp profile / wp doctor / REST request.
  • Confirm the performance delta and that behavior is unchanged.
  • If the fix is risky, ship behind a feature flag or staged rollout when possible.

WordPress 6.9 performance improvements

Be aware of these 6.9 changes when profiling:

On-demand CSS for classic themes:

  • Classic themes now get on-demand CSS loading (previously only block themes had this).
  • Reduces CSS payload by 30-65% by only loading styles for blocks actually used on the page.
  • If you're profiling a classic theme, this should already be helping.

Block themes with no render-blocking resources:

  • Block themes that don't define custom stylesheets (like Twenty Twenty-Three/Four) can now load with zero render-blocking CSS.
  • Styles come from global styles (theme.json) and separate block styles, all inlined.
  • This significantly improves LCP (Largest Contentful Paint).

Inline CSS limit increased:

  • The threshold for inlining small stylesheets has been raised, reducing render-blocking resources.

Reference: https://make.wordpress.org/core/2025/11/18/wordpress-6-9-frontend-performance-field-guide/

Verification

  • Baseline vs after numbers are captured (same environment, same URL/route).
  • wp doctor check is clean (or improved) when applicable.
  • No new PHP errors or warnings in logs.
  • No cache flush is required for correctness (cache flush should be last resort).

Failure modes / debugging

  • “No change” after code changes:
    • you measured a different URL/site (--url mismatch), caches masked results, or opcode cache is stale
  • Profiling data is noisy:
    • eliminate background tasks, test with warmed caches, run multiple samples
  • SAVEQUERIES/Query Monitor causes overhead:
    • don’t run in production unless explicitly approved

Escalation

  • If this is production and you don’t have explicit approval, do not:
    • install plugins, enable SAVEQUERIES, run load tests, or flush caches during traffic
  • If you need system-level profiling (APM, PHP profiler extensions), coordinate with ops/hosting.

Más skills de wordpress

blueprint
wordpress
Úsalo al crear, editar o revisar archivos JSON de blueprint de WordPress Playground. Se activa con menciones de blueprints, configuración de playground o solicitudes…
official
wordpress-router
wordpress
Clasifica bases de código de WordPress y enruta al flujo de trabajo correcto para plugins, temas, bloques y checkouts del núcleo. Ejecuta triaje automatizado de proyectos para identificar el tipo de repositorio (plugin, tema, tema de bloques, bloques de Gutenberg, núcleo de WP) y las herramientas disponibles. Genera resultados de clasificación y enrutamiento de árbol de decisión a habilidades específicas del dominio según la intención del usuario y el tipo de proyecto. Requiere acceso raíz al repositorio y operaciones del sistema de archivos con bash/Node; algunos flujos de trabajo necesitan WP-CLI. Está dirigido a WordPress 6.9+ con PHP 7.2.24+;...
official
wp-abilities-api
wordpress
Registro de la API de Abilidades de WordPress, exposición REST y consumo del lado del cliente para WordPress 6.9+. Registre habilidades y categorías en PHP usando wp_register_ability() y wp_register_ability_category() con IDs estables, etiquetas y metadatos. Exponga habilidades a los clientes a través de los endpoints REST /wp-json/wp-abilities/v1/ configurando meta.show_in_rest: true. Consuma habilidades en JavaScript usando el paquete @wordpress/abilities para acceso del lado del cliente y comprobaciones de permisos. Requiere WordPress 6.9+...
official
wp-abilities-audit
wordpress
Auditar la superficie REST de un plugin de WordPress y producir un documento de auditoría estandarizado que proponga registros de Abilities API. Produce un documento markdown con un YAML…
official
wp-abilities-verify
wordpress
Verifica los registros de la API de Abilities de un plugin de WordPress: enumera las abilities, comprueba que el comportamiento del callback coincida con lo que afirma cada anotación (el adversario…
official
wp-block-development
wordpress
Desarrollo de bloques de WordPress para Gutenberg: metadatos, registro, renderizado y flujos de trabajo de compilación. Cubre la creación de bloques, configuración de block.json, renderizado estático vs. dinámico, y registro PHP del lado del servidor con register_block_type_from_metadata(). Exige apiVersion: 3 para compatibilidad con WordPress 6.9+, incluyendo soporte de editor iframe y aislamiento de estilos. Maneja serialización de atributos, deprecaciones/migraciones para prevenir errores de "Bloque inválido", y composición de bloques internos. Incluye...
official
wp-block-themes
wordpress
Desarrollo de temas de bloque en WordPress: theme.json, plantillas, patrones y solución de problemas del Editor del Sitio. Cubre la edición de theme.json (preajustes, configuraciones, estilos por bloque), plantillas y partes de plantilla, patrones y variaciones de estilo en WordPress 6.9+. Incluye scripts de triaje para detectar raíces de temas y estructura de temas de bloque, además de procedimientos guiados para crear nuevos temas o convertir temas clásicos. Proporciona flujos de trabajo de depuración para problemas de jerarquía de estilos, anulaciones de personalización del usuario y el Editor del Sitio...
official
wp-interactivity-api
wordpress
Úsalo al construir o depurar funciones de la API de Interactividad de WordPress (directivas data-wp-*, store/state/actions de @wordpress/interactivity, block viewScriptModule…
official