feat(perf): mobile performance Phase 1 — dequeue unused plugin assets + slim fonts + preconnect (#13)

Ships peptide-starter-theme v1.6.0.

Changes:
- New inc/perf-asset-policy.php module: conditional dequeue of WC/Elementor/USMI assets on pages that do not need them, Google Fonts weight slim (Roboto 100..900 → 400/500/700; Roboto Slab → 400/700), wp_resource_hints preconnect for fonts.googleapis.com + fonts.gstatic.com, cookie-notice-front script defer.
- Kill-switch constant PEPTIDE_STARTER_PERF_DEQUEUE (default true) for instant rollback via wp-config.php.
- 4 extensibility filters: peptide_starter_perf_woocommerce_{styles,scripts}, _elementor_{styles,scripts}, _usmi_{styles,scripts}, _font_weights.
- 13 unit tests in tests/test-perf-asset-policy.php.
- Bootstrap: 2 lines in functions.php (require + after_setup_theme action).
- Docs: CHANGELOG [1.6.0], ARCHITECTURE.md, CONVENTIONS.md how-to.

Target: mobile PSI 74 → 90+, LCP 5.4s → ~2.5s.

Post-deploy: purge LiteSpeed CSS bundle.

QA: qa-reviews/peptide-starter-theme/2026-04-23-a54b5c9.md (APPROVE with handle-drift verified false-positive).
This commit is contained in:
peptiderepo
2026-04-23 13:24:47 +07:00
committed by GitHub
parent 6956479df2
commit d79fc94061
7 changed files with 645 additions and 3 deletions

View File

@@ -129,6 +129,43 @@ do_action( 'peptide_starter_hero_before' );
- **languages/:** Translation files
- **template-parts/:** Reusable template parts
## How to add a performance policy rule
When adding a new asset-perf rule (e.g., a new plugin's CSS to dequeue on
non-relevant pages, or a new font family to slim):
1. **For dequeues:** edit `inc/perf-asset-policy.php`. Add the plugin's
handle list to a new function (or extend the existing arrays via the
matching filter — `peptide_starter_perf_<plugin>_handles`). Hook the
new dequeue function on `wp_enqueue_scripts` priority 100, gated by
`PEPTIDE_STARTER_PERF_DEQUEUE` and a context predicate (e.g.,
`is_front_page()`, `! is_woocommerce()`).
2. **For font slimming:** add the family to the default array in
`peptide_starter_perf_slim_google_fonts()`, or override at runtime
via the `peptide_starter_perf_font_weights` filter. Specify only
weights actually used by the design system; defaulting to "all weights"
defeats the purpose.
3. **For new resource hints:** extend `peptide_starter_perf_resource_hints()`
with the new domain in the `preconnect` array. WP renders the
`<link>` tag automatically; don't echo your own.
4. **For deferring third-party scripts:** add the script handle to the
list in `peptide_starter_perf_defer_cookie_notice()` (or rename the
function if it grows beyond cookie-notice).
5. **Always add a test case** in `tests/test-perf-asset-policy.php`
covering the new rule's happy path AND its negation (the page-context
where the rule must NOT apply). The dequeue logic is silent if a
handle name is wrong — only tests catch this before deploy.
6. **Verify on production handles** before committing. Plugin handle
names are not always what you'd guess. SSH to Hostinger and run
`wp eval 'global $wp_styles; do_action("wp_enqueue_scripts");
foreach($wp_styles->registered as $h=>$o){echo $h.PHP_EOL;}'` to
dump the actual handle names.
## Step-by-Step Guides
### How to Add a New Template