Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Bootstrap loads every class eagerly; rely on the classmap from #526 instead

Aperta
#560 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
65/100
Tipo di issue
Refactoring
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
php, wordpress

Direzione di ricerca

Examine agents-api.php to see the current eager require_once statements. Identify the files with side effects (register-.php, functions-.php, guidelines.php) and the add_action calls. Understand the Composer classmap from PR #526. Test changes in a WordPress multisite setup, using opcache_get_status() to measure memory impact. Ensure version skew handling via AGENTS_API_LOADED is preserved.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Problem

agents-api.php require_onces every class and interface file under src/ (about 240 files on current main, 0.11.2) on every request, before any agent, chat or workflow is used. #526 added a lazy Composer classmap covering the full public class/interface surface, but the bootstrap still loads all of those classes eagerly, so the classmap never gets a chance to be lazy at runtime.

On a WordPress multisite where the package is bundled in a network-activated plugin (via Composer, as wordpress/agents-api), the package accounts for 249 cached scripts and about 5 MB of OPcache memory, measured with opcache_get_status(). On that server OPcache is full (128 MB), so this is memory taken from code that runs on every request. The chat is used on one page; every other request on every site pays for the whole runtime.

Proposal

Now that every class and interface is in the classmap, the bootstrap only needs to require_once files that have side effects or define functions:

  • src/*/register-*.php
  • src/Runtime/functions-*.php, src/Abilities/functions-ability-dispatch.php, src/Guidelines/guidelines.php
  • the add_action() calls at the end

and leave class-*.php / interface-*.php to the autoloader. Hook callbacks already reference classes by name as strings, so registration itself should not force them to load. Only a class actually touched during a request would be compiled and cached.

For the non-Composer (plain plugin) install, a small spl_autoload_register() over a generated class-to-file map (or the existing vendor/composer/autoload_classmap.php) would give the same behaviour.

Things to keep

  • Version skew. The AGENTS_API_LOADED branch currently loads missing symbols from the newer copy eagerly. With lazy loading, whichever copy's autoloader is registered first would win for classes not yet loaded, so the skew guarantee from #279 needs an equivalent (for example, the bootstrap that defines AGENTS_API_LOADED registering its own class map ahead of Composer's, or the skew branch registering a prepend autoloader for the newer copy).
  • Composer autoload outside WordPress stays inert, and PHPStan behaviour from #524/#526 is unchanged.

Happy to test a branch against our install and report OPcache numbers before and after.

Lingua principale
PHP
Stelle
33
Fork
8
Merge medio
24m
PR unite (30g)
18

Preparare l'ambiente

Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Automattic/agents-api

Tutte le issue di Automattic/agents-api

Issue simili

Altre issue su PHP

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.