Optimización del Rendimiento
Optimización del Rendimiento de XOOPS
Sección titulada «Optimización del Rendimiento de XOOPS»Guía completa para optimizar XOOPS para máxima velocidad y eficiencia.
Descripción General de Optimización del Rendimiento
Sección titulada «Descripción General de Optimización del Rendimiento»graph TD A[Rendimiento] --> B[Almacenamiento en Caché] A --> C[Base de Datos] A --> D[Servidor Web] A --> E[Frontend] A --> F[Código] B --> B1[Caché de Página] B --> B2[Caché de Consulta] B --> B3[Caché de Plantilla] C --> C1[Índices] C --> C2[Consultas] C --> C3[Optimización] D --> D1[Compresión] D --> D2[Encabezados] D --> D3[Conexión] E --> E1[Imágenes] E --> E2[CSS/JS] E --> E3[Carga Perezosa] F --> F1[Módulos] F --> F2[Consultas]Configuración del Almacenamiento en Caché
Sección titulada «Configuración del Almacenamiento en Caché»El almacenamiento en caché es la forma más rápida de mejorar el rendimiento.
Almacenamiento en Caché de Nivel de Página
Sección titulada «Almacenamiento en Caché de Nivel de Página»Habilitar almacenamiento en caché de página completa en XOOPS:
Panel de Administración > Sistema > Preferencias > Configuración de Caché
Habilitar Almacenamiento en Caché: SíTipo de Caché: Caché de Archivo (o APCu/Memcache)Tiempo de Vida del Caché: 3600 segundos (1 hora)Cachear Listas de Módulos: SíCachear Configuración: SíCachear Resultados de Búsqueda: SíAlmacenamiento en Caché Basado en Archivos
Sección titulada «Almacenamiento en Caché Basado en Archivos»Configurar ubicación de caché de archivo:
# Crear directorio de caché fuera de la raíz web (más seguro)mkdir -p /var/cache/xoopschown www-data:www-data /var/cache/xoopschmod 755 /var/cache/xoops
# Editar mainfile.phpdefine('XOOPS_CACHE_PATH', '/var/cache/xoops/');Almacenamiento en Caché de APCu
Sección titulada «Almacenamiento en Caché de APCu»APCu proporciona almacenamiento en caché en memoria (muy rápido):
# Instalar APCuapt-get install php-apcu
# Verificar instalaciónphp -m | grep apcu
# Configurar en php.iniapc.enabled = 1apc.memory_size = 128Mapc.ttl = 0apc.user_ttl = 3600apc.shm_size = 128Habilitar en XOOPS:
Panel de Administración > Sistema > Preferencias > Configuración de Caché
Tipo de Caché: APCuAlmacenamiento en Caché de Memcache/Redis
Sección titulada «Almacenamiento en Caché de Memcache/Redis»Almacenamiento en caché distribuido para sitios de alto tráfico:
Instalar Memcache:
# Instalar servidor Memcacheapt-get install memcached
# Iniciar serviciosystemctl start memcachedsystemctl enable memcached
# Verificar funcionamientonetstat -tlnp | grep memcached# Debe mostrar escuchando en puerto 11211Configurar en XOOPS:
Editar mainfile.php:
// Configuración de Memcachedefine('XOOPS_CACHE_TYPE', 'memcache');define('XOOPS_CACHE_HOST', 'localhost');define('XOOPS_CACHE_PORT', 11211);define('XOOPS_CACHE_TIMEOUT', 0);O en el panel de administración:
Tipo de Caché: MemcacheHost de Memcache: localhost:11211Almacenamiento en Caché de Plantilla
Sección titulada «Almacenamiento en Caché de Plantilla»Compilar y almacenar en caché las plantillas de XOOPS:
# Asegurar que templates_c sea escribiblechmod 777 /var/www/html/xoops/templates_c/
# Limpiar plantillas cacheadas antiguasrm -rf /var/www/html/xoops/templates_c/*Configurar en tema:
<!-- En theme xoops_version.php -->{smarty.const.XOOPS_VAR_PATH|constant}<{$xoops_meta}>
<!-- Las plantillas usan almacenamiento en caché -->{cache} [Contenido cacheado aquí]{/cache}Optimización de Base de Datos
Sección titulada «Optimización de Base de Datos»Añadir Índices de Base de Datos
Sección titulada «Añadir Índices de Base de Datos»Las bases de datos correctamente indexadas consultan mucho más rápido.
-- Verificar índices actualesSHOW INDEXES FROM xoops_users;
-- Índices comunes a añadirALTER TABLE xoops_users ADD INDEX idx_uname (uname);ALTER TABLE xoops_users ADD INDEX idx_email (email);ALTER TABLE xoops_users ADD INDEX idx_uid_active (uid, user_actkey);
-- Añadir índices a tablas de publicaciones/contenidoALTER TABLE xoops_posts ADD INDEX idx_post_published (post_published);ALTER TABLE xoops_posts ADD INDEX idx_post_uid (post_uid);ALTER TABLE xoops_posts ADD INDEX idx_post_created (post_created);
-- Verificar índices creadosSHOW INDEXES FROM xoops_users\GOptimizar Tablas
Sección titulada «Optimizar Tablas»La optimización regular de tablas mejora el rendimiento:
-- Optimizar todas las tablasOPTIMIZE TABLE xoops_users;OPTIMIZE TABLE xoops_posts;OPTIMIZE TABLE xoops_config;OPTIMIZE TABLE xoops_comments;
-- O optimizar todo a la vezREPAIR TABLE xoops_users;OPTIMIZE TABLE xoops_users;REPAIR TABLE xoops_posts;OPTIMIZE TABLE xoops_posts;Crear script de optimización automatizado:
#!/bin/bash# Script de optimización de base de datos
echo "Optimizando base de datos de XOOPS..."
mysql -u xoops_user -p xoops_db << EOF-- Optimizar todas las tablasOPTIMIZE TABLE xoops_users;OPTIMIZE TABLE xoops_posts;OPTIMIZE TABLE xoops_config;OPTIMIZE TABLE xoops_comments;OPTIMIZE TABLE xoops_users_online;
-- Mostrar tamaño de base de datosSELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) as total_mbFROM information_schema.tablesWHERE table_schema = 'xoops_db'GROUP BY table_schema;EOF
echo "¡Optimización de base de datos completada!"Programar con cron:
# Optimización semanalcrontab -e# Añadir: 0 3 * * 0 /usr/local/bin/optimize-xoops-db.shOptimización de Consultas
Sección titulada «Optimización de Consultas»Revisar consultas lentas:
-- Habilitar registro de consultas lentasSET GLOBAL slow_query_log = 'ON';SET GLOBAL long_query_time = 2;
-- Ver consultas lentasSELECT * FROM mysql.slow_log;
-- O verificar archivo de registro lentotail -100 /var/log/mysql/slow.logTécnicas comunes de optimización:
// LENTO - Evitar consultas innecesarias en buclesforeach ($users as $user) { $profile = getUserProfile($user['uid']); // ¡Consulta en bucle! echo $profile['name'];}
// RÁPIDO - Obtener todos los datos a la vez$profiles = getAllUserProfiles($user_ids);foreach ($users as $user) { echo $profiles[$user['uid']]['name'];}Aumentar Fondo de Búfer
Sección titulada «Aumentar Fondo de Búfer»Configurar MySQL para mejor caché:
Editar /etc/mysql/mysql.conf.d/mysqld.cnf:
# Fondo de Búfer de InnoDB (50-80% de RAM del sistema)innodb_buffer_pool_size = 1G
# Caché de Consulta (opcional, puede deshabilitarse en MySQL 5.7+)query_cache_size = 64Mquery_cache_type = 1
# Max Conexionesmax_connections = 500
# Paquete Máximo Permitidomax_allowed_packet = 256M
# Tiempo de espera de conexiónconnect_timeout = 10Reiniciar MySQL:
systemctl restart mysqlOptimización del Servidor Web
Sección titulada «Optimización del Servidor Web»Habilitar Compresión Gzip
Sección titulada «Habilitar Compresión Gzip»Comprimir respuestas para reducir ancho de banda:
Configuración de Apache:
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
# No comprimir imágenes y archivos ya comprimidos SetEnvIfNoCase Request_URI \.(jpg|jpeg|png|gif|zip|gzip)$ no-gzip dont-vary
# Registrar respuestas comprimidas DeflateBufferSize 8096</IfModule>Configuración de Nginx:
gzip on;gzip_types text/html text/plain text/css text/javascript application/javascript application/json;gzip_min_length 1000;gzip_vary on;gzip_comp_level 6;
# No comprimir formatos ya comprimidosgzip_disable "msie6";Verificar compresión:
# Verificar si la respuesta está comprimida con gzipcurl -I -H "Accept-Encoding: gzip" http://your-domain.com/xoops/
# Debe mostrar:# Content-Encoding: gzipEncabezados de Caché del Navegador
Sección titulada «Encabezados de Caché del Navegador»Establecer expiración de caché para activos estáticos:
Apache:
<IfModule mod_expires.c> ExpiresActive On
# Cachear imágenes por 30 días ExpiresByType image/jpeg "access plus 30 days" ExpiresByType image/gif "access plus 30 days" ExpiresByType image/png "access plus 30 days" ExpiresByType image/svg+xml "access plus 30 days"
# Cachear CSS/JS por 30 días ExpiresByType text/css "access plus 30 days" ExpiresByType application/javascript "access plus 30 days" ExpiresByType text/javascript "access plus 30 days"
# Cachear fuentes por 1 año ExpiresByType font/eot "access plus 1 year" ExpiresByType font/ttf "access plus 1 year" ExpiresByType font/woff "access plus 1 year" ExpiresByType font/woff2 "access plus 1 year"
# No cachear HTML ExpiresByType text/html "access plus 1 hour"</IfModule>Nginx:
location ~* \.(jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 30d; add_header Cache-Control "public, immutable";}
location ~* \.(css|js)$ { expires 30d; add_header Cache-Control "public";}
location ~ \.html$ { expires 1h; add_header Cache-Control "public";}Activar Mantenimiento de Conexión (Keep-Alive)
Sección titulada «Activar Mantenimiento de Conexión (Keep-Alive)»Habilitar conexiones HTTP persistentes:
Apache:
<IfModule mod_http.c> KeepAlive On KeepAliveTimeout 15 MaxKeepAliveRequests 100</IfModule>Nginx:
keepalive_timeout 15s;keepalive_requests 100;Optimización de Frontend
Sección titulada «Optimización de Frontend»Optimizar Imágenes
Sección titulada «Optimizar Imágenes»Reducir tamaños de archivos de imagen:
# Comprimir imágenes JPEG en lotefor img in *.jpg; do convert "$img" -quality 85 "optimized_$img"done
# Comprimir imágenes PNG en lotefor img in *.png; do optipng -o2 "$img"done
# O usar herramienta imagemin CLInpm install -g imagemin-cliimagemin images/ --out-dir=images-optimizedMinificar CSS y JavaScript
Sección titulada «Minificar CSS y JavaScript»Reducir tamaños de archivo CSS/JS:
Usando herramientas Node.js:
# Instalar minificadoresnpm install -g uglify-js clean-css-cli
# Minificar JavaScriptuglifyjs script.js -o script.min.js
# Minificar CSScleancss style.css -o style.min.cssUsando herramientas en línea:
- CSS Minifier: https://cssminifier.com/
- JavaScript Minifier: https://www.minifycode.com/javascript-minifier/
Carga Perezosa de Imágenes
Sección titulada «Carga Perezosa de Imágenes»Cargar imágenes solo cuando sea necesario:
<!-- Añadir atributo loading="lazy" --><img src="image.jpg" alt="Descripción" loading="lazy">
<!-- O usar librería JavaScript para navegadores antiguos --><img class="lazy" src="placeholder.jpg" data-src="image.jpg" alt="Descripción">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vanilla-lazyload/17.1.2/lazyload.min.js"></script><script> var lazyLoad = new LazyLoad({ elements_selector: ".lazy" });</script>Reducir Recursos que Bloquean el Renderizado
Sección titulada «Reducir Recursos que Bloquean el Renderizado»Cargar CSS/JS estratégicamente:
<!-- Cargar CSS crítico en línea --><style> /* Estilos críticos para contenido visible */</style>
<!-- Diferir CSS no crítico --><link rel="stylesheet" href="style.css" media="print" onload="this.media='all'">
<!-- Diferir JavaScript --><script src="script.js" defer></script>
<!-- O usar async para scripts no críticos --><script src="analytics.js" async></script>Integración de CDN
Sección titulada «Integración de CDN»Usar una Red de Entrega de Contenidos para acceso más rápido globalmente.
CDNs Populares
Sección titulada «CDNs Populares»| CDN | Costo | Características |
|---|---|---|
| Cloudflare | Gratuito/Pago | DDoS, DNS, Caché, Análisis |
| AWS CloudFront | Pago | Alto rendimiento, global |
| Bunny CDN | Asequible | Almacenamiento, video, caché |
| jsDelivr | Gratuito | Librerías JavaScript |
| cdnjs | Gratuito | Librerías populares |
Configuración de Cloudflare
Sección titulada «Configuración de Cloudflare»-
Registrarse en https://www.cloudflare.com/
-
Añadir su dominio
-
Actualizar servidores de nombres con los de Cloudflare
-
Habilitar opciones de caché:
- Nivel de Caché: Agresivo
- Cachear en todo: Activado
- TTL de Caché del Navegador: 1 mes
-
En XOOPS, actualizar su dominio para usar DNS de Cloudflare
Configurar CDN en XOOPS
Sección titulada «Configurar CDN en XOOPS»Actualizar URLs de imagen a CDN:
Editar plantilla de tema:
<!-- Original --><img src="{$xoops_url}/uploads/image.jpg" alt="">
<!-- Con CDN --><img src="https://cdn.your-domain.com/uploads/image.jpg" alt="">O establecer en PHP:
// En mainfile.php o configdefine('XOOPS_CDN_URL', 'https://cdn.your-domain.com');
// En plantilla<img src="{$smarty.const.XOOPS_CDN_URL}/uploads/image.jpg" alt="">Monitoreo del Rendimiento
Sección titulada «Monitoreo del Rendimiento»Prueba de PageSpeed Insights
Sección titulada «Prueba de PageSpeed Insights»Probar rendimiento del sitio:
- Visitar Google PageSpeed Insights: https://pagespeed.web.dev/
- Ingresar su URL de XOOPS
- Revisar recomendaciones
- Implementar mejoras sugeridas
Monitoreo de Rendimiento del Servidor
Sección titulada «Monitoreo de Rendimiento del Servidor»Supervisar métricas del servidor en tiempo real:
# Instalar herramientas de monitoreoapt-get install htop iotop nethogs
# Supervisar CPU y memoriahtop
# Supervisar I/O de discoiotop
# Supervisar rednethogsPerfilado de Rendimiento de PHP
Sección titulada «Perfilado de Rendimiento de PHP»Identificar código PHP lento:
<?php// Usar Xdebug para perfilarxdebug_start_trace('profile');
// Su código aquí$result = someExpensiveFunction();
xdebug_stop_trace();?>Monitoreo de Consultas MySQL
Sección titulada «Monitoreo de Consultas MySQL»Rastrear consultas lentas:
# Habilitar registro de consultasmysql -u root -p
SET GLOBAL general_log = 'ON';SET GLOBAL log_output = 'FILE';SET GLOBAL general_log_file = '/var/log/mysql/query.log';
# Revisar consultas lentastail -f /var/log/mysql/slow.log
# Analizar consulta con EXPLAINEXPLAIN SELECT * FROM xoops_users WHERE uid = 1\GLista de Verificación de Optimización del Rendimiento
Sección titulada «Lista de Verificación de Optimización del Rendimiento»Implementar estos para obtener el mejor rendimiento:
- Almacenamiento en Caché: Habilitar almacenamiento en caché de archivo/APCu/Memcache
- Base de Datos: Añadir índices, optimizar tablas
- Compresión: Habilitar compresión Gzip
- Caché del Navegador: Establecer encabezados de caché
- Imágenes: Optimizar y comprimir
- CSS/JS: Minificar archivos
- Carga Perezosa: Implementar para imágenes
- CDN: Usar para activos estáticos
- Keep-Alive: Habilitar conexiones persistentes
- Módulos: Desactivar módulos no utilizados
- Temas: Usar temas ligeros y optimizados
- Monitoreo: Rastrear métricas de rendimiento
- Mantenimiento Regular: Limpiar caché, optimizar BD
Script de Optimización del Rendimiento
Sección titulada «Script de Optimización del Rendimiento»Optimización automatizada:
#!/bin/bash# Script de optimización del rendimiento
echo "=== Optimización del Rendimiento de XOOPS ==="
# Limpiar cachéecho "Limpiando caché..."rm -rf /var/www/html/xoops/cache/*rm -rf /var/www/html/xoops/templates_c/*
# Optimizar base de datosecho "Optimizando base de datos..."mysql -u xoops_user -p xoops_db << EOFOPTIMIZE TABLE xoops_users;OPTIMIZE TABLE xoops_posts;OPTIMIZE TABLE xoops_config;OPTIMIZE TABLE xoops_comments;EOF
# Verificar permisos de archivoecho "Verificando permisos de archivo..."find /var/www/html/xoops -type f -exec chmod 644 {} \;find /var/www/html/xoops -type d -exec chmod 755 {} \;chmod 777 /var/www/html/xoops/cachechmod 777 /var/www/html/xoops/templates_cchmod 777 /var/www/html/xoops/uploadschmod 777 /var/www/html/xoops/var
# Generar informe de rendimientoecho "¡Optimización del Rendimiento Completada!"echo ""echo "Próximos pasos:"echo "1. Probar sitio en https://pagespeed.web.dev/"echo "2. Supervisar rendimiento en panel de administración"echo "3. Considerar CDN para activos estáticos"echo "4. Revisar consultas lentas en MySQL"Métricas Antes y Después
Sección titulada «Métricas Antes y Después»Rastrear mejoras:
Antes de Optimización:- Tiempo de Carga de Página: 3.5 segundos- Consultas de Base de Datos: 45- Tasa de Acierto de Caché: 0%- Tamaño de Base de Datos: 250MB
Después de Optimización:- Tiempo de Carga de Página: 0.8 segundos (77% más rápido)- Consultas de Base de Datos: 8 (en caché)- Tasa de Acierto de Caché: 85%- Tamaño de Base de Datos: 120MB (optimizado)Próximos Pasos
Sección titulada «Próximos Pasos»- Revisar configuración básica
- Asegurar medidas de seguridad
- Implementar almacenamiento en caché
- Supervisar rendimiento con herramientas
- Ajustar basándose en métricas
Etiquetas: #performance #optimization #caching #database #cdn
Artículos Relacionados:
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- System-Settings
- Security-Configuration
- ../Installation/Server-Requirements