Conceptoactiveverificado 2026-04-15#frontend#performance#javascript#htmx#alpine#lazy-loading#ux#audit-abril-2026
Performance Guidelines - CreaRack Pro
Última actualización: 26-01-2026 Mejora conseguida: Lighthouse 88 → 92 (+4 puntos)
Este documento establece las buenas prácticas de rendimiento para el desarrollo frontend de CreaRack Pro.
1. Carga de Scripts
Regla General: Usar defer para scripts no críticos
<!-- CORRECTO: Script con defer -->
<script src="{% static 'js/konva.min.js' %}" defer></script>
<!-- INCORRECTO: Script bloqueante -->
<script src="{% static 'js/konva.min.js' %}"></script>
Scripts que DEBEN usar defer
| Script | Razón |
|---|---|
konva.min.js | 171KB - Mayor ahorro (~627ms) |
xterm.js | 283KB - Solo se usa en terminal SSH |
socket.io.min.js | 46KB - Solo para conexiones WebSocket |
session_timeout.js | No crítico para render inicial |
dashboard_widgets.js | No crítico para render inicial |
network_status.js | No crítico para render inicial |
script_manager.js | No crítico para render inicial |
auth.js | No crítico para render inicial |
Scripts que NO deben usar defer
- Scripts inline con lógica de inicialización crítica
- Scripts
type="module"(ya son diferidos por defecto)
2. Carga de CSS
Regla: CSS no crítico debe cargarse de forma asíncrona
<!-- CORRECTO: CSS async con fallback -->
<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="styles.css"></noscript>
<!-- INCORRECTO: CSS bloqueante -->
<link rel="stylesheet" href="styles.css">
CSS que debe ser async
| CSS | Razón |
|---|---|
fontawesome/all.min.css | 89KB, 99% no usado en render inicial |
xterm.css | Solo se usa cuando se abre terminal |
CSS que debe ser síncrono (crítico)
base.css- Layout fundamentallayout.css- Estructura de páginacomponents.css- Componentes visibles inmediatamente
3. Google Fonts
Regla: Siempre usar preconnect antes de cargar fuentes
<!-- CORRECTO: Preconnect antes de cargar -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=..." rel="stylesheet">
<!-- INCORRECTO: Sin preconnect -->
<link href="https://fonts.googleapis.com/css2?family=..." rel="stylesheet">
Ahorro estimado: ~50-100ms en conexión inicial
4. Propiedades CSS a Evitar
backdrop-filter: blur()
NUNCA usar en elementos que contengan inputs interactivos.
/* PROHIBIDO en modales con inputs */
.modal-overlay {
backdrop-filter: blur(2px); /* CAUSA 1.5s de latencia en inputs */
}
/* CORRECTO */
.modal-overlay {
background: rgba(0, 0, 0, 0.75); /* Usar opacidad en su lugar */
}
transition en inputs
Evitar transiciones en campos de formulario.
/* EVITAR */
input {
transition: border-color 0.2s; /* Añade latencia perceptible */
}
/* MEJOR */
input {
/* Sin transición - respuesta inmediata */
}
5. JavaScript - Debounce y Throttle
Auto-save debe usar debounce
// CORRECTO: Debounce antes de procesar
let autoSaveTimer = null;
const AUTO_SAVE_DEBOUNCE_MS = 500;
export function triggerAutoSave() {
if (autoSaveTimer) clearTimeout(autoSaveTimer);
autoSaveTimer = setTimeout(() => {
saveRackState();
autoSaveTimer = null;
}, AUTO_SAVE_DEBOUNCE_MS);
}
// INCORRECTO: Guardar en cada cambio
export function triggerAutoSave() {
saveRackState(); // Ejecuta en cada keystroke
}
Event listeners de actividad deben usar throttle
// CORRECTO: Throttle para eventos frecuentes
handleActivity() {
const now = Date.now();
if (now - this.lastActivity > this.throttleMs) {
this.lastActivity = now;
this.resetTimeout();
}
}
// INCORRECTO: Procesar cada evento
handleActivity() {
this.resetTimeout(); // Ejecuta en cada mousemove/keydown
}
6. Event Delegation
Usar delegación en lugar de listeners individuales
// CORRECTO: Un listener en el contenedor
const modalContent = modal.querySelector('.modal-content');
if (modalContent) {
const stopProp = (e) => e.stopPropagation();
['keydown', 'keypress', 'keyup', 'input'].forEach(evtType => {
modalContent.addEventListener(evtType, stopProp, true);
});
}
// INCORRECTO: Listener en cada input
modal.querySelectorAll('input').forEach(input => {
input.addEventListener('keydown', stopProp);
input.addEventListener('keypress', stopProp);
// ... repetido para cada evento
});
7. Checklist para Nuevos Templates
Al crear un nuevo template HTML:
- Scripts pesados (>50KB) tienen
defer - CSS no crítico usa carga async
- Google Fonts tienen
preconnect - No hay
backdrop-filter: blur()en modales con inputs - No hay
transitionen campos de formulario - Auto-save usa debounce (mínimo 500ms)
- Event listeners usan delegación cuando sea posible
8. Métricas Objetivo (Lighthouse)
| Métrica | Objetivo | Actual |
|---|---|---|
| Performance | > 90 | 92 |
| FCP | < 1.5s | ~0.7s |
| LCP | < 2.5s | ~1.8s |
| TBT | < 200ms | 0ms |
| CLS | < 0.1 | 0.005 |
9. Historial de Optimizaciones
Sesión 26-01-2026
Problema: Latencia de 1.5s al escribir en modales + Score Lighthouse 88
Soluciones aplicadas:
- Eliminado
backdrop-filter: blur(2px)de.modal-overlay - Eliminado
transition: border-color 0.2sde inputs - Añadido throttle a
SessionTimeoutManager(5s) - Añadido debounce a
triggerAutoSave()(500ms) - Event delegation en modales de
ui_panels.js deferen 10+ scripts (konva, xterm, socket.io, etc.)- CSS async para FontAwesome y xterm.css
- Preconnect para Google Fonts
Resultado:
- Latencia de input: 1.5s → 0s
- Lighthouse: 88 → 92 (+4 puntos)
- FCP: 1344ms → ~700ms
Referencias
Véase también
- [[crearack-tech—frontend—design-guidelines]] — guidelines de diseño UI
- [[crearack-tech—frontend—centralized-services]] — servicios JS centralizados
- [[crearack-tech—frontend—design-system]] — design system de componentes
- [[crearack-tech—architecture—performance-optimization]] — optimización de rendimiento a nivel arquitectura
- [[crearack-tech—backend—autoplan-performance]] — performance de Auto-Plan
Referenciado desde
- Asteroids Background Effect
- Auditoría Profunda de Código — CreaRack Pro v1.0.25
- CreaRack Pro - Sistema de Diseno
- Design Guidelines - CreaRack Pro
- Guía de Optimización de Performance - CreaRack Pro
- Patrón Monitoring* — bases comunes + descriptor por dominio (serie F1, auditoría s187)
- Servicios Centralizados Frontend