Files
roi-theme/Shared/Infrastructure
FrankZamora d5a2fd2702 perf: defer Bootstrap CSS with critical subset inline
- Created Assets/css/critical-bootstrap.css (~10KB subset)
  Contains only Bootstrap classes used in above-the-fold components:
  container, navbar, flexbox, dropdown, spacing utilities

- Created CriticalBootstrapService (singleton)
  Injects minified critical Bootstrap in <head> at priority 0
  Output: <style id="roi-critical-bootstrap">...</style>

- Modified enqueue-scripts.php
  Bootstrap now loads with media="print" + onload="this.media='all'"
  Full 31KB Bootstrap loads async, doesn't block rendering

- Updated CriticalCSSHooksRegistrar
  Now registers both CriticalBootstrapService (priority 0)
  and CriticalCSSService (priority 1)

Flow:
1. wp_head (priority 0) → Critical Bootstrap (~10KB inline)
2. wp_head (priority 1) → Critical Component CSS (~4KB inline)
3. Bootstrap full (31KB) loads deferred, non-blocking

Expected PageSpeed improvement: ~400-600ms LCP reduction

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 10:26:24 -06:00
..

Capa de Infraestructura

📋 Propósito

La Capa de Infraestructura contiene las implementaciones concretas de las interfaces definidas en el Dominio. Conecta la lógica de negocio con el mundo exterior (WordPress, MySQL, cache, HTTP).

🎯 Responsabilidades

  • Implementar interfaces del Dominio
  • Conectar con frameworks (WordPress)
  • Persistencia (MySQL via wpdb)
  • Cache (WordPress Transients)
  • HTTP (AJAX endpoints)
  • Contiene detalles de implementación

📦 Estructura

Infrastructure/
├── Persistence/
│   └── WordPress/
│       ├── WordPressComponentRepository.php    (MySQL)
│       └── WordPressDefaultsRepository.php     (Schemas)
├── Services/
│   ├── WordPressValidationService.php          (Validación)
│   ├── WordPressCacheService.php               (Transients)
│   ├── SchemaSyncService.php                   (JSON → BD)
│   └── CleanupService.php                      (Limpieza)
├── API/
│   └── WordPress/
│       └── AjaxController.php                  (Endpoints AJAX)
├── Facades/
│   └── ComponentManager.php                    (API unificada)
├── DI/
│   └── DIContainer.php                         (Dependency Injection)
└── README.md

🔌 Implementaciones

Repositories

WordPressComponentRepository

Persiste componentes en wp_roi_theme_components.

Métodos:

  • save(Component): INSERT o UPDATE
  • findByName(string): Buscar por nombre
  • findAll(): Obtener todos
  • delete(string): Eliminar

WordPressDefaultsRepository

Gestiona schemas en wp_roi_theme_defaults.

Services

WordPressValidationService

Valida datos contra schemas.

Estrategia:

  1. Obtener schema de BD
  2. Validar estructura
  3. Sanitizar con funciones WordPress

WordPressCacheService

Cache con WordPress Transients API.

TTL default: 1 hora (3600 segundos)

SchemaSyncService

Sincroniza schemas desde JSON a BD.

CleanupService

Elimina componentes obsoletos.

API

AjaxController

Endpoints AJAX de WordPress.

Endpoints disponibles:

  • roi_theme_save_component (POST)
  • roi_theme_get_component (GET)
  • roi_theme_delete_component (POST)
  • roi_theme_sync_schema (POST)

Seguridad:

  • Nonce verification
  • Capability check (manage_options)

Facade

ComponentManager

API unificada para todo el sistema.

Uso:

$manager = new ComponentManager($container);
$result = $manager->saveComponent('top_bar', $data);

📐 Principios Arquitectónicos

Dependency Inversion

Infrastructure implementa interfaces del Domain:

class WordPressComponentRepository implements ComponentRepositoryInterface
{
    // Implementación específica de WordPress
}

Separación de Concerns

  • Repositories: Solo persistencia
  • Services: Lógica de infraestructura
  • Controller: Solo HTTP
  • Facade: Orquestación simple

🧪 Testing

Tests de integración (usan BD real de WordPress):

vendor\bin\phpunit tests\Integration\Infrastructure

🔗 Referencias

  • Domain Layer: ../Domain/README.md
  • Application Layer: ../Application/README.md