feat(pagespeed): implementar campo is_critical para CSS crítico dinámico (Phase 4.2)
Implementación completa del sistema de Critical CSS dinámico según plan 13.01: Domain Layer: - Crear CriticalCSSCollectorInterface para DIP compliance Infrastructure Layer: - Implementar CriticalCSSCollector (singleton via DIContainer) - Crear CriticalCSSHooksRegistrar para inyección en wp_head - Actualizar DIContainer con getCriticalCSSCollector() Schemas: - Agregar campo is_critical a navbar, top-notification-bar, hero - Sincronizar con BD (18+39+31 campos) Renderers (navbar, top-notification-bar, hero): - Inyectar CriticalCSSCollectorInterface via constructor - Lógica condicional: si is_critical=true → CSS a <head> Admin (FormBuilders + FieldMappers): - Toggle "CSS Crítico" en sección visibility - Mapeo AJAX para persistencia Beneficios: - LCP optimizado: CSS crítico inline en <head> - Above-the-fold rendering sin FOUC - Componentes configurables desde admin panel 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,7 @@ namespace ROITheme\Public\Navbar\Infrastructure\Ui;
|
||||
use ROITheme\Shared\Domain\Entities\Component;
|
||||
use ROITheme\Shared\Domain\Contracts\RendererInterface;
|
||||
use ROITheme\Shared\Domain\Contracts\CSSGeneratorInterface;
|
||||
use ROITheme\Shared\Domain\Contracts\CriticalCSSCollectorInterface;
|
||||
use Walker_Nav_Menu;
|
||||
|
||||
/**
|
||||
@@ -30,9 +31,11 @@ final class NavbarRenderer implements RendererInterface
|
||||
{
|
||||
/**
|
||||
* @param CSSGeneratorInterface $cssGenerator Servicio de generación de CSS
|
||||
* @param CriticalCSSCollectorInterface $criticalCollector Colector de CSS crítico
|
||||
*/
|
||||
public function __construct(
|
||||
private CSSGeneratorInterface $cssGenerator
|
||||
private CSSGeneratorInterface $cssGenerator,
|
||||
private CriticalCSSCollectorInterface $criticalCollector
|
||||
) {}
|
||||
|
||||
public function render(Component $component): string
|
||||
@@ -46,6 +49,17 @@ final class NavbarRenderer implements RendererInterface
|
||||
$css = $this->generateCSS($data);
|
||||
$html = $this->buildMenu($data);
|
||||
|
||||
// Verificar si el CSS debe ser crítico (inyectado en <head>)
|
||||
$isCritical = isset($data['visibility']['is_critical']) &&
|
||||
$data['visibility']['is_critical'] === true;
|
||||
|
||||
if ($isCritical) {
|
||||
// CSS crítico: agregar al collector para inyección en <head>
|
||||
$this->criticalCollector->add('navbar', $css);
|
||||
return $html; // Solo HTML, CSS se inyecta en <head>
|
||||
}
|
||||
|
||||
// CSS no crítico: incluir inline con el componente
|
||||
return sprintf(
|
||||
"<style>%s</style>\n%s",
|
||||
$css,
|
||||
|
||||
Reference in New Issue
Block a user