feat(critical-css): implementar TIPO 4 y TIPO 5 - CSS Below-the-fold y Lazy Loading
## TIPO 4: CSS Below-the-fold (Critical Variables + Responsive) - Inyecta variables CSS críticas inline en wp_head P:-1 - Inyecta media queries críticas inline en wp_head P:2 (corregido de P:1) - Auto-regeneración cuando archivos fuente cambian (filemtime check) - Cache en Assets/CriticalCSS/ para evitar lecturas repetidas - Comando WP-CLI: wp roi-theme generate-critical-css Archivos TIPO 4: - Public/CriticalCSS/Domain/Contracts/ - Interfaces (DIP) - Public/CriticalCSS/Application/UseCases/GetCriticalCSSUseCase.php - Public/CriticalCSS/Infrastructure/Cache/CriticalCSSFileCache.php - Public/CriticalCSS/Infrastructure/Services/CriticalCSSExtractor.php - Public/CriticalCSS/Infrastructure/Services/CriticalCSSInjector.php - bin/generate-critical-css.php ## TIPO 5: CSS No Crítico (Lazy Loading) - Animaciones CSS: carga 2s después de page load via requestIdleCallback - Print CSS: carga solo al imprimir via beforeprint event - Fallback <noscript> para usuarios sin JavaScript - Safari fallback: setTimeout cuando requestIdleCallback no disponible Archivos TIPO 5: - Assets/Js/lazy-css-loader.js - Public/LazyCSSLoader/Infrastructure/Contracts/LazyCSSRegistrarInterface.php - Public/LazyCSSLoader/Infrastructure/Services/LazyCSSRegistrar.php ## Fix: Colisión de prioridades wp_head Antes: TIPO 1 (P:1), TIPO 4 responsive (P:1), TIPO 3 (P:2) - CONFLICTO Después: TIPO 1 (P:1), TIPO 4 responsive (P:2), TIPO 3 (P:3) - OK Nuevo orden de prioridades: P:-1 roi-critical-variables (TIPO 4) P:0 roi-critical-bootstrap (TIPO 2) P:1 roi-critical-css (TIPO 1) P:2 roi-critical-responsive (TIPO 4) P:3 roi-custom-critical-css (TIPO 3) P:5 roi-theme-layout-css (ThemeSettings) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ROITheme\Public\CriticalCSS\Domain\Contracts;
|
||||
|
||||
/**
|
||||
* Interface para cache de CSS critico
|
||||
*
|
||||
* Define el contrato para almacenamiento y recuperacion
|
||||
* de CSS critico generado (TIPO 4).
|
||||
*
|
||||
* @package ROITheme\Public\CriticalCSS\Domain\Contracts
|
||||
*/
|
||||
interface CriticalCSSCacheInterface
|
||||
{
|
||||
/**
|
||||
* Obtiene CSS del cache
|
||||
*
|
||||
* @param string $key Clave del cache (ej: 'variables', 'responsive')
|
||||
* @return string|null CSS cacheado o null si no existe
|
||||
*/
|
||||
public function get(string $key): ?string;
|
||||
|
||||
/**
|
||||
* Guarda CSS en cache
|
||||
*
|
||||
* @param string $key Clave del cache
|
||||
* @param string $css Contenido CSS a guardar
|
||||
* @return bool True si se guardo correctamente
|
||||
*/
|
||||
public function set(string $key, string $css): bool;
|
||||
|
||||
/**
|
||||
* Verifica si existe en cache
|
||||
*
|
||||
* @param string $key Clave del cache
|
||||
* @return bool True si existe
|
||||
*/
|
||||
public function has(string $key): bool;
|
||||
|
||||
/**
|
||||
* Limpia todo el cache
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function clear(): void;
|
||||
|
||||
/**
|
||||
* Verifica si el cache esta desactualizado respecto al archivo fuente
|
||||
*
|
||||
* Compara filemtime del archivo fuente vs archivo cache.
|
||||
* Si el fuente es mas nuevo, el cache esta desactualizado.
|
||||
*
|
||||
* @param string $key Clave del cache
|
||||
* @param string $sourceFile Ruta absoluta al archivo fuente
|
||||
* @return bool True si el cache es mas viejo que el fuente
|
||||
*/
|
||||
public function isStale(string $key, string $sourceFile): bool;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ROITheme\Public\CriticalCSS\Domain\Contracts;
|
||||
|
||||
/**
|
||||
* Interface para extraccion de CSS critico
|
||||
*
|
||||
* Define el contrato para extraer CSS critico de archivos fuente
|
||||
* y generar versiones optimizadas para inline (TIPO 4).
|
||||
*
|
||||
* @package ROITheme\Public\CriticalCSS\Domain\Contracts
|
||||
*/
|
||||
interface CriticalCSSExtractorInterface
|
||||
{
|
||||
/**
|
||||
* Extrae CSS de variables
|
||||
*
|
||||
* El archivo css-global-variables.css completo es critico
|
||||
* porque define las variables CSS usadas en todo el sitio.
|
||||
*
|
||||
* @return string CSS de variables minificado
|
||||
*/
|
||||
public function extractVariables(): string;
|
||||
|
||||
/**
|
||||
* Extrae media queries criticas
|
||||
*
|
||||
* Solo extrae breakpoints mobile-first criticos de
|
||||
* css-global-responsive.css para evitar layout shift.
|
||||
*
|
||||
* @return string CSS responsive critico minificado
|
||||
*/
|
||||
public function extractResponsive(): string;
|
||||
|
||||
/**
|
||||
* Genera y cachea todo el CSS critico
|
||||
*
|
||||
* Extrae variables y responsive, los minifica y guarda en cache.
|
||||
*
|
||||
* @return array<string, int> Mapa de tipo => bytes generados
|
||||
*/
|
||||
public function generateAll(): array;
|
||||
|
||||
/**
|
||||
* Verifica si algun archivo fuente ha cambiado
|
||||
* respecto al cache generado
|
||||
*
|
||||
* Usado para auto-regeneracion en el bootstrap.
|
||||
*
|
||||
* @return bool True si se necesita regenerar
|
||||
*/
|
||||
public function needsRegeneration(): bool;
|
||||
}
|
||||
Reference in New Issue
Block a user