Ottimizzazione delle Prestazioni
Ottimizzazione delle Prestazioni di XOOPS
Sezione intitolata “Ottimizzazione delle Prestazioni di XOOPS”Guida completa all’ottimizzazione di XOOPS per massima velocità ed efficienza.
Panoramica Ottimizzazione Prestazioni
Sezione intitolata “Panoramica Ottimizzazione Prestazioni”graph TD A[Prestazioni] --> B[Caching] A --> C[Database] A --> D[Web Server] A --> E[Frontend] A --> F[Codice] B --> B1[Cache Pagina] B --> B2[Cache Query] B --> B3[Cache Template] C --> C1[Indici] C --> C2[Query] C --> C3[Ottimizzazione] D --> D1[Compressione] D --> D2[Header] D --> D3[Connessione] E --> E1[Immagini] E --> E2[CSS/JS] E --> E3[Lazy Load] F --> F1[Moduli] F --> F2[Query]Configurazione Caching
Sezione intitolata “Configurazione Caching”Il caching è il modo più veloce per migliorare le prestazioni.
Caching a Livello di Pagina
Sezione intitolata “Caching a Livello di Pagina”Abilita cache pagina intera in XOOPS:
Pannello Admin > Sistema > Preferenze > Impostazioni Cache
Abilita Caching: YesTipo Cache: File Cache (o APCu/Memcache)Durata Cache: 3600 secondi (1 ora)Cache Elenco Moduli: YesCache Configurazione: YesCache Risultati Ricerca: YesCaching basato su File
Sezione intitolata “Caching basato su File”Configura ubicazione cache file:
# Crea directory cache fuori dalla root web (più sicuro)mkdir -p /var/cache/xoopschown www-data:www-data /var/cache/xoopschmod 755 /var/cache/xoops
# Modifica mainfile.phpdefine('XOOPS_CACHE_PATH', '/var/cache/xoops/');Caching APCu
Sezione intitolata “Caching APCu”APCu fornisce caching in-memory (molto veloce):
# Installa APCuapt-get install php-apcu
# Verifica installazionephp -m | grep apcu
# Configura in php.iniapc.enabled = 1apc.memory_size = 128Mapc.ttl = 0apc.user_ttl = 3600apc.shm_size = 128Abilita in XOOPS:
Pannello Admin > Sistema > Preferenze > Impostazioni Cache
Tipo Cache: APCuCaching Memcache/Redis
Sezione intitolata “Caching Memcache/Redis”Caching distribuito per siti ad alto traffico:
Installa Memcache:
# Installa server Memcacheapt-get install memcached
# Avvia serviziosystemctl start memcachedsystemctl enable memcached
# Verifica in esecuzionenetstat -tlnp | grep memcached# Deve mostrarsi in ascolto sulla porta 11211Configura in XOOPS:
Modifica mainfile.php:
// Configurazione Memcachedefine('XOOPS_CACHE_TYPE', 'memcache');define('XOOPS_CACHE_HOST', 'localhost');define('XOOPS_CACHE_PORT', 11211);define('XOOPS_CACHE_TIMEOUT', 0);Oppure nel pannello admin:
Tipo Cache: MemcacheHost Memcache: localhost:11211Caching Template
Sezione intitolata “Caching Template”Compila e caccia template XOOPS:
# Assicura che templates_c sia scrivibilechmod 777 /var/www/html/xoops/templates_c/
# Cancella template cached vecchirm -rf /var/www/html/xoops/templates_c/*Configura nel tema:
<!-- Nel tema xoops_version.php -->{smarty.const.XOOPS_VAR_PATH|constant}<{$xoops_meta}>
<!-- Template usano caching -->{cache} [Contenuto cached qui]{/cache}Ottimizzazione Database
Sezione intitolata “Ottimizzazione Database”Aggiungi Indici Database
Sezione intitolata “Aggiungi Indici Database”Un database propriamente indicizzato esegue query molto più velocemente.
-- Controlla indici attualiSHOW INDEXES FROM xoops_users;
-- Indici comuni da aggiungereALTER 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);
-- Aggiungi indici a tabelle post/contenutiALTER 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);
-- Verifica indici creatiSHOW INDEXES FROM xoops_users\GOttimizza Tabelle
Sezione intitolata “Ottimizza Tabelle”L’ottimizzazione regolare delle tabelle migliora le prestazioni:
-- Ottimizza tutte le tabelleOPTIMIZE TABLE xoops_users;OPTIMIZE TABLE xoops_posts;OPTIMIZE TABLE xoops_config;OPTIMIZE TABLE xoops_comments;
-- Oppure tutto in una voltaREPAIR TABLE xoops_users;OPTIMIZE TABLE xoops_users;REPAIR TABLE xoops_posts;OPTIMIZE TABLE xoops_posts;Crea script di ottimizzazione automatizzata:
#!/bin/bash# Script di ottimizzazione database
echo "Ottimizzazione database XOOPS..."
mysql -u xoops_user -p xoops_db << EOF-- Ottimizza tutte le tabelleOPTIMIZE TABLE xoops_users;OPTIMIZE TABLE xoops_posts;OPTIMIZE TABLE xoops_config;OPTIMIZE TABLE xoops_comments;OPTIMIZE TABLE xoops_users_online;
-- Mostra dimensione databaseSELECT 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 "Ottimizzazione database completata!"Pianifica con cron:
# Ottimizzazione settimanalecrontab -e# Aggiungi: 0 3 * * 0 /usr/local/bin/optimize-xoops-db.shOttimizzazione Query
Sezione intitolata “Ottimizzazione Query”Rivedi query lente:
-- Abilita log query lenteSET GLOBAL slow_query_log = 'ON';SET GLOBAL long_query_time = 2;
-- Visualizza query lenteSELECT * FROM mysql.slow_log;
-- Oppure controlla file log slowtail -100 /var/log/mysql/slow.logTecniche di ottimizzazione comuni:
// LENTO - Evita query non necessarie in loopforeach ($users as $user) { $profile = getUserProfile($user['uid']); // Query in loop! echo $profile['name'];}
// VELOCE - Ottieni tutti i dati in una volta$profiles = getAllUserProfiles($user_ids);foreach ($users as $user) { echo $profiles[$user['uid']]['name'];}Aumenta Buffer Pool
Sezione intitolata “Aumenta Buffer Pool”Configura MySQL per miglior caching:
Modifica /etc/mysql/mysql.conf.d/mysqld.cnf:
# InnoDB Buffer Pool (50-80% della RAM di sistema)innodb_buffer_pool_size = 1G
# Query Cache (opzionale, può essere disabilitato in MySQL 5.7+)query_cache_size = 64Mquery_cache_type = 1
# Max Connessionimax_connections = 500
# Max Allowed Packetmax_allowed_packet = 256M
# Timeout connessioneconnect_timeout = 10Riavvia MySQL:
systemctl restart mysqlOttimizzazione Web Server
Sezione intitolata “Ottimizzazione Web Server”Abilita Compressione Gzip
Sezione intitolata “Abilita Compressione Gzip”Comprimi risposte per ridurre la larghezza di banda:
Configurazione Apache:
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
# Non comprimere immagini e file già compressi SetEnvIfNoCase Request_URI \.(jpg|jpeg|png|gif|zip|gzip)$ no-gzip dont-vary
# Log risposte compresse DeflateBufferSize 8096</IfModule>Configurazione 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;
# Non comprimere formati già compressigzip_disable "msie6";Verifica compressione:
# Controlla se risposta è gzippatacurl -I -H "Accept-Encoding: gzip" http://your-domain.com/xoops/
# Deve mostrare:# Content-Encoding: gzipHeader Cache Browser
Sezione intitolata “Header Cache Browser”Imposta scadenza cache per asset statici:
Apache:
<IfModule mod_expires.c> ExpiresActive On
# Cache immagini per 30 giorni 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"
# Cache CSS/JS per 30 giorni ExpiresByType text/css "access plus 30 days" ExpiresByType application/javascript "access plus 30 days" ExpiresByType text/javascript "access plus 30 days"
# Cache font per 1 anno 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"
# Non cachare 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";}Connessione Keep-Alive
Sezione intitolata “Connessione Keep-Alive”Abilita connessioni HTTP persistenti:
Apache:
<IfModule mod_http.c> KeepAlive On KeepAliveTimeout 15 MaxKeepAliveRequests 100</IfModule>Nginx:
keepalive_timeout 15s;keepalive_requests 100;Ottimizzazione Frontend
Sezione intitolata “Ottimizzazione Frontend”Ottimizza Immagini
Sezione intitolata “Ottimizza Immagini”Riduci dimensioni file immagini:
# Comprimi batch immagini JPEGfor img in *.jpg; do convert "$img" -quality 85 "optimized_$img"done
# Comprimi batch immagini PNGfor img in *.png; do optipng -o2 "$img"done
# Oppure usa imagemin CLInpm install -g imagemin-cliimagemin images/ --out-dir=images-optimizedMinifica CSS e JavaScript
Sezione intitolata “Minifica CSS e JavaScript”Riduci dimensioni file CSS/JS:
Usando strumenti Node.js:
# Installa minificatorinpm install -g uglify-js clean-css-cli
# Minifica JavaScriptuglifyjs script.js -o script.min.js
# Minifica CSScleancss style.css -o style.min.cssUsando strumenti online:
- CSS Minifier: https://cssminifier.com/
- JavaScript Minifier: https://www.minifycode.com/javascript-minifier/
Lazy Load Immagini
Sezione intitolata “Lazy Load Immagini”Carica immagini solo quando necessario:
<!-- Aggiungi attributo loading="lazy" --><img src="image.jpg" alt="Description" loading="lazy">
<!-- Oppure usa libreria JavaScript per browser più vecchi --><img class="lazy" src="placeholder.jpg" data-src="image.jpg" alt="Description">
<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>Riduci Risorse di Blocking Render
Sezione intitolata “Riduci Risorse di Blocking Render”Carica CSS/JS strategicamente:
<!-- Carica CSS critico inline --><style> /* Stili critici per above-the-fold */</style>
<!-- Rinvia CSS non critico --><link rel="stylesheet" href="style.css" media="print" onload="this.media='all'">
<!-- Rinvia JavaScript --><script src="script.js" defer></script>
<!-- Oppure usa async per script non critici --><script src="analytics.js" async></script>Integrazione CDN
Sezione intitolata “Integrazione CDN”Usa Content Delivery Network per accesso globale più veloce.
CDN Popolari
Sezione intitolata “CDN Popolari”| CDN | Costo | Caratteristiche |
|---|---|---|
| Cloudflare | Gratuito/Pagato | DDoS, DNS, Cache, Analytics |
| AWS CloudFront | Pagato | High performance, globale |
| Bunny CDN | Economico | Storage, video, cache |
| jsDelivr | Gratuito | Librerie JavaScript |
| cdnjs | Gratuito | Librerie popolari |
Setup Cloudflare
Sezione intitolata “Setup Cloudflare”-
Registrati su https://www.cloudflare.com/
-
Aggiungi il tuo dominio
-
Aggiorna nameserver con quelli di Cloudflare
-
Abilita opzioni caching:
- Cache Level: Aggressive
- Caching su everything: On
- Browser Caching TTL: 1 mese
-
In XOOPS, aggiorna il tuo dominio per usare DNS Cloudflare
Configura CDN in XOOPS
Sezione intitolata “Configura CDN in XOOPS”Aggiorna URL immagini verso CDN:
Modifica template tema:
<!-- Originale --><img src="{$xoops_url}/uploads/image.jpg" alt="">
<!-- Con CDN --><img src="https://cdn.your-domain.com/uploads/image.jpg" alt="">Oppure imposta in PHP:
// In mainfile.php o configdefine('XOOPS_CDN_URL', 'https://cdn.your-domain.com');
// Nel template<img src="{$smarty.const.XOOPS_CDN_URL}/uploads/image.jpg" alt="">Monitoraggio Prestazioni
Sezione intitolata “Monitoraggio Prestazioni”Test PageSpeed Insights
Sezione intitolata “Test PageSpeed Insights”Testa le prestazioni del tuo sito:
- Visita Google PageSpeed Insights: https://pagespeed.web.dev/
- Inserisci URL XOOPS
- Rivedi raccomandazioni
- Implementa miglioramenti suggeriti
Monitoraggio Prestazioni Server
Sezione intitolata “Monitoraggio Prestazioni Server”Monitora metriche server in tempo reale:
# Installa strumenti di monitoraggioapt-get install htop iotop nethogs
# Monitora CPU e memoriahtop
# Monitora I/O discoiotop
# Monitora retenethogsProfiling Prestazioni PHP
Sezione intitolata “Profiling Prestazioni PHP”Identifica codice PHP lento:
<?php// Usa Xdebug per profilingxdebug_start_trace('profile');
// Tuo codice qui$result = someExpensiveFunction();
xdebug_stop_trace();?>Monitoraggio Query MySQL
Sezione intitolata “Monitoraggio Query MySQL”Traccia query lente:
# Abilita query loggingmysql -u root -p
SET GLOBAL general_log = 'ON';SET GLOBAL log_output = 'FILE';SET GLOBAL general_log_file = '/var/log/mysql/query.log';
# Rivedi query lentetail -f /var/log/mysql/slow.log
# Analizza query con EXPLAINEXPLAIN SELECT * FROM xoops_users WHERE uid = 1\GChecklist Ottimizzazione Prestazioni
Sezione intitolata “Checklist Ottimizzazione Prestazioni”Implementa questi per le migliori prestazioni:
- Caching: Abilita file/APCu/Memcache caching
- Database: Aggiungi indici, ottimizza tabelle
- Compressione: Abilita compressione Gzip
- Browser Cache: Imposta header cache
- Immagini: Ottimizza e comprimi
- CSS/JS: Minifica file
- Lazy Loading: Implementa per immagini
- CDN: Usa per asset statici
- Keep-Alive: Abilita connessioni persistenti
- Moduli: Disabilita moduli non usati
- Temi: Usa temi leggeri, ottimizzati
- Monitoraggio: Traccia metriche prestazioni
- Manutenzione Regolare: Cancella cache, ottimizza DB
Script Ottimizzazione Prestazioni
Sezione intitolata “Script Ottimizzazione Prestazioni”Ottimizzazione automatizzata:
#!/bin/bash# Script di ottimizzazione prestazioni
echo "=== Ottimizzazione Prestazioni XOOPS ==="
# Cancella cacheecho "Cancellazione cache..."rm -rf /var/www/html/xoops/cache/*rm -rf /var/www/html/xoops/templates_c/*
# Ottimizza databaseecho "Ottimizzazione database..."mysql -u xoops_user -p xoops_db << EOFOPTIMIZE TABLE xoops_users;OPTIMIZE TABLE xoops_posts;OPTIMIZE TABLE xoops_config;OPTIMIZE TABLE xoops_comments;EOF
# Controlla permessi fileecho "Verifica permessi file..."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
# Genera report prestazioniecho "Ottimizzazione Prestazioni Completata!"echo ""echo "Prossimi passaggi:"echo "1. Testa sito su https://pagespeed.web.dev/"echo "2. Monitora prestazioni nel pannello admin"echo "3. Considera CDN per asset statici"echo "4. Rivedi query lente in MySQL"Metriche Prima e Dopo
Sezione intitolata “Metriche Prima e Dopo”Traccia miglioramenti:
Prima dell'Ottimizzazione:- Tempo Caricamento Pagina: 3.5 secondi- Query Database: 45- Cache Hit Rate: 0%- Dimensione Database: 250MB
Dopo l'Ottimizzazione:- Tempo Caricamento Pagina: 0.8 secondi (77% più veloce)- Query Database: 8 (cached)- Cache Hit Rate: 85%- Dimensione Database: 120MB (ottimizzato)Prossimi Passi
Sezione intitolata “Prossimi Passi”- Rivedi configurazione di base
- Assicura misure di sicurezza
- Implementa caching
- Monitora prestazioni con strumenti
- Adatta in base a metriche
Tag: #prestazioni #ottimizzazione #caching #database #cdn
Articoli Correlati:
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- System-Settings
- Security-Configuration
- ../Installation/Server-Requirements