perf(bootstrap): Reduce Bootstrap CSS de 227KB a 145KB con PurgeCSS
- Genera bootstrap-subset.min.css con solo clases usadas (36% reduccion) - Actualiza enqueue-scripts.php para usar el subset - Agrega scripts de build: npm run build:bootstrap - Mejora LCP al reducir tiempo de parseo CSS Impacto estimado: - Bootstrap: 227KB -> 145KB (-82KB) - Tiempo parseo CSS: ~800ms -> ~500ms - LCP: mejora esperada ~300-500ms 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
171
purgecss.config.js
Normal file
171
purgecss.config.js
Normal file
@@ -0,0 +1,171 @@
|
||||
/**
|
||||
* PurgeCSS Configuration for ROI Theme
|
||||
*
|
||||
* Genera un subset de Bootstrap con SOLO las clases usadas en el tema.
|
||||
*
|
||||
* USO:
|
||||
* npx purgecss --config purgecss.config.js
|
||||
*
|
||||
* OUTPUT:
|
||||
* Assets/Vendor/Bootstrap/Css/bootstrap-subset.min.css
|
||||
*
|
||||
* @see https://purgecss.com/configuration.html
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
// CSS a procesar
|
||||
css: ['Assets/Vendor/Bootstrap/Css/bootstrap.min.css'],
|
||||
|
||||
// Archivos a analizar para encontrar clases usadas
|
||||
content: [
|
||||
// Templates PHP principales
|
||||
'*.php',
|
||||
|
||||
// Componentes Public (Renderers)
|
||||
'Public/**/*.php',
|
||||
|
||||
// Componentes Admin (FormBuilders) - también usan Bootstrap
|
||||
'Admin/**/*.php',
|
||||
|
||||
// Includes
|
||||
'Inc/**/*.php',
|
||||
|
||||
// Templates parts
|
||||
'template-parts/**/*.php',
|
||||
|
||||
// JavaScript (puede contener clases dinámicas)
|
||||
'Assets/js/**/*.js',
|
||||
],
|
||||
|
||||
// Output
|
||||
output: 'Assets/Vendor/Bootstrap/Css/',
|
||||
|
||||
// Safelist: Clases que SIEMPRE deben incluirse aunque no se detecten
|
||||
// (clases generadas dinámicamente, JavaScript, etc.)
|
||||
safelist: {
|
||||
// Clases exactas
|
||||
standard: [
|
||||
// Estados de navbar scroll (JavaScript)
|
||||
'scrolled',
|
||||
'navbar-scrolled',
|
||||
|
||||
// Bootstrap Collapse (JavaScript)
|
||||
'show',
|
||||
'showing',
|
||||
'hiding',
|
||||
'collapse',
|
||||
'collapsing',
|
||||
|
||||
// Estados de dropdown
|
||||
'dropdown-menu',
|
||||
'dropdown-item',
|
||||
'dropdown-toggle',
|
||||
|
||||
// Estados de form
|
||||
'is-valid',
|
||||
'is-invalid',
|
||||
'was-validated',
|
||||
|
||||
// Visually hidden (accesibilidad)
|
||||
'visually-hidden',
|
||||
'visually-hidden-focusable',
|
||||
|
||||
// Screen reader
|
||||
'sr-only',
|
||||
],
|
||||
|
||||
// Patrones regex
|
||||
deep: [
|
||||
// Todas las variantes de col-* (grid responsive)
|
||||
/^col-/,
|
||||
|
||||
// Todas las variantes de d-* (display)
|
||||
/^d-/,
|
||||
|
||||
// Todas las variantes responsive de navbar
|
||||
/^navbar-expand/,
|
||||
|
||||
// Margin/Padding responsive
|
||||
/^m[tbsexy]?-/,
|
||||
/^p[tbsexy]?-/,
|
||||
|
||||
// Gap utilities
|
||||
/^gap-/,
|
||||
/^g-/,
|
||||
|
||||
// Flex utilities
|
||||
/^flex-/,
|
||||
/^justify-/,
|
||||
/^align-/,
|
||||
|
||||
// Text utilities
|
||||
/^text-/,
|
||||
/^fw-/,
|
||||
/^fs-/,
|
||||
|
||||
// Background
|
||||
/^bg-/,
|
||||
|
||||
// Border
|
||||
/^border/,
|
||||
/^rounded/,
|
||||
|
||||
// Shadow
|
||||
/^shadow/,
|
||||
|
||||
// Width/Height
|
||||
/^w-/,
|
||||
/^h-/,
|
||||
|
||||
// Position
|
||||
/^position-/,
|
||||
/^top-/,
|
||||
/^bottom-/,
|
||||
/^start-/,
|
||||
/^end-/,
|
||||
|
||||
// Overflow
|
||||
/^overflow-/,
|
||||
],
|
||||
|
||||
// Selectores con estos patrones en cualquier parte
|
||||
greedy: [
|
||||
// Form controls
|
||||
/form-/,
|
||||
|
||||
// Buttons
|
||||
/btn/,
|
||||
|
||||
// Cards
|
||||
/card/,
|
||||
|
||||
// Navbar
|
||||
/navbar/,
|
||||
/nav-/,
|
||||
|
||||
// Tables
|
||||
/table/,
|
||||
|
||||
// Alerts (usado en admin)
|
||||
/alert/,
|
||||
|
||||
// Badges
|
||||
/badge/,
|
||||
|
||||
// Lists
|
||||
/list-/,
|
||||
],
|
||||
},
|
||||
|
||||
// Variables CSS de Bootstrap (mantener todas)
|
||||
variables: true,
|
||||
|
||||
// Keyframes de animaciones
|
||||
keyframes: true,
|
||||
|
||||
// Font faces
|
||||
fontFace: true,
|
||||
|
||||
// Rejected (para debugging - genera archivo con clases eliminadas)
|
||||
rejected: false,
|
||||
};
|
||||
Reference in New Issue
Block a user