Ydeevne FAQ
Ofte stillede spørgsmål om ydeevne
Sektion kaldt “Ofte stillede spørgsmål om ydeevne”Almindelige spørgsmål og svar om optimering af XOOPS ydeevne og diagnosticering af langsomme websteder.
Generel præstation
Sektion kaldt “Generel præstation”Q: Hvordan kan jeg se, om mit XOOPS-websted er langsomt?
Sektion kaldt “Q: Hvordan kan jeg se, om mit XOOPS-websted er langsomt?”A: Brug disse værktøjer og målinger:
- Sideindlæsningstid:
# Use curl to measure response timecurl -w "@curl-format.txt" -o /dev/null -s https://yoursite.com
# Or use online tools# - PageSpeed Insights (Google)# - GTmetrix# - WebPageTest- Målmålinger:
- Første indholdsfulde maling (FCP): < 1,8 s
- Største indholdsfyldte maling (LCP): < 2,5s
- Tid til første byte (TTFB): < 0,6s
- Samlet sidestørrelse: < 2-3 MB
- Tjek serverlogfiler:
# Apachetail -100 /var/log/apache2/access.log
# Nginxtail -100 /var/log/nginx/access.log
# Look for slow requests (> 1 second)Q: Hvad er de mest almindelige problemer med ydeevnen?
Sektion kaldt “Q: Hvad er de mest almindelige problemer med ydeevnen?”A:
pie title Common Performance Issues "Unoptimized Database Queries" : 25 "Large Uncompressed Assets" : 20 "Missing Caching" : 20 "Too Many Extensions/Plugins" : 15 "Insufficient Server Resources" : 12 "Unoptimized Images" : 8Q: Hvor skal jeg fokusere min optimeringsindsats?
Sektion kaldt “Q: Hvor skal jeg fokusere min optimeringsindsats?”A: Følg optimeringsprioriteten:
graph TD A[Performance Optimization] --> B["1. Caching"] A --> C["2. Database Queries"] A --> D["3. Asset Optimization"] A --> E["4. Code Optimization"]
B --> B1["✓ Page caching"] B --> B2["✓ Object caching"] B --> B3["✓ Query caching"]
C --> C1["✓ Add indexes"] C --> C2["✓ Optimize queries"] C --> C3["✓ Remove N+1"]
D --> D1["✓ Compress images"] D --> D2["✓ Minify CSS/JS"] D --> D3["✓ Enable gzip"]
E --> E1["✓ Remove bloat"] E --> E2["✓ Lazy loading"] E --> E3["✓ Code refactoring"]Caching
Sektion kaldt “Caching”Sp.: Hvordan aktiverer jeg caching i XOOPS?
Sektion kaldt “Sp.: Hvordan aktiverer jeg caching i XOOPS?”A: XOOPS har indbygget caching. Konfigurer i Admin > Indstillinger > Ydelse:
<?php// Check cache settings in mainfile.php or admin// Common cache types:// 1. file - File-based cache (default)// 2. memcache - Memcached (if installed)// 3. redis - Redis (if installed)
// In code, use cache:$cache = xoops_cache_handler::getInstance();
// Read from cache$data = $cache->read('cache_key');
if ($data === false) { // Not in cache, get from source $data = expensive_operation();
// Write to cache (3600 = 1 hour) $cache->write('cache_key', $data, 3600);}?>Q: Hvilken type caching skal jeg bruge?
Sektion kaldt “Q: Hvilken type caching skal jeg bruge?”A:
- Filcache: Standard, enkel, ingen ekstra opsætning. God til små steder.
- Memcache: Hurtigere, hukommelsesbaseret. Bedre til websteder med høj trafik.
- Redis: Mest kraftfuld, understøtter flere datatyper. Bedst til skalering.
Installer og aktiver:
# Install Memcachedsudo apt-get install memcached php-memcached
# Or install Redissudo apt-get install redis-server php-redis
# Restart PHP-FPM or Apachesudo systemctl restart php-fpmsudo systemctl restart apache2Aktivér derefter i XOOPS admin.
Q: Hvordan rydder jeg XOOPS cache?
Sektion kaldt “Q: Hvordan rydder jeg XOOPS cache?”A:
# Clear all cacherm -rf xoops_data/caches/*
# Clear Smarty cache specificallyrm -rf xoops_data/caches/smarty_cache/*rm -rf xoops_data/caches/smarty_compile/*
# Or in admin panelGo to Admin > System > Maintenance > Clear CacheI kode:
<?php$cache = xoops_cache_handler::getInstance();$cache->deleteAll();
// Or clear specific keys$cache->delete('cache_key');?>Q: Hvor længe skal jeg cache data?
Sektion kaldt “Q: Hvor længe skal jeg cache data?”A: Afhænger af kravene til datafriskhed:
<?php// 5 minutes - Frequently changing data$cache->write('key', $data, 300);
// 1 hour - Semi-static data$cache->write('key', $data, 3600);
// 24 hours - Static data, images, etc.$cache->write('key', $data, 86400);
// No expiration (until manual clear)$cache->write('key', $data, 0);
// Cache during current request only$cache->write('key', $data, 1);?>Databaseoptimering
Sektion kaldt “Databaseoptimering”Q: Hvordan kan jeg finde langsomme databaseforespørgsler?
Sektion kaldt “Q: Hvordan kan jeg finde langsomme databaseforespørgsler?”A: Aktiver forespørgselslogning:
<?php// In mainfile.phpdefine('XOOPS_DB_DEBUGMODE', true);define('XOOPS_SQL_DEBUG', true);
// Then check xoops_log tableSELECT * FROM xoops_log WHERE logid > SOME_NUMBERORDER BY created DESC LIMIT 20;?>Eller brug MySQL langsom forespørgselslog:
# Enable in /etc/mysql/my.cnf[mysqld]slow_query_log = 1slow_query_log_file = /var/log/mysql/slow.loglong_query_time = 1 # Log queries > 1 second
# View slow queriestail -100 /var/log/mysql/slow.logQ: Hvordan optimerer jeg databaseforespørgsler?
Sektion kaldt “Q: Hvordan optimerer jeg databaseforespørgsler?”A: Følg disse trin:
1. Tilføj databaseindekser
-- Add index to frequently searched columnsALTER TABLE `xoops_articles` ADD INDEX `author_id` (`author_id`);ALTER TABLE `xoops_articles` ADD INDEX `created` (`created`);
-- Check if index helpsANALYZE TABLE `xoops_articles`;EXPLAIN SELECT * FROM xoops_articles WHERE author_id = 5;2. Brug LIMIT og sideinddeling
<?php// WRONG - Gets all records$result = $db->query("SELECT * FROM xoops_articles");
// CORRECT - Gets 10 records starting at offset$limit = 10;$offset = 0; // Change with pagination$result = $db->query( "SELECT * FROM xoops_articles LIMIT $limit OFFSET $offset");?>3. Vælg kun nødvendige kolonner
<?php// WRONG$result = $db->query("SELECT * FROM xoops_articles");
// CORRECT$result = $db->query( "SELECT id, title, author_id, created FROM xoops_articles");?>4. Undgå N+1 forespørgsler
<?php// WRONG - N+1 problem$articles = $db->query("SELECT * FROM xoops_articles");while ($article = $articles->fetch_assoc()) { // This query runs once per article! $author = $db->query( "SELECT * FROM xoops_users WHERE uid = " . $article['author_id'] );}
// CORRECT - Use JOIN$result = $db->query(" SELECT a.*, u.uname, u.email FROM xoops_articles a JOIN xoops_users u ON a.author_id = u.uid");
while ($row = $result->fetch_assoc()) { echo $row['title'] . " by " . $row['uname'];}?>5. Brug EXPLAIN til at analysere forespørgsler
EXPLAIN SELECT * FROM xoops_articles WHERE author_id = 5 AND status = 1;
-- Look for:-- - type: ALL (bad), INDEX (ok), const/ref (good)-- - possible_keys: Should show available indexes-- - key: Should use best index-- - rows: Should be low numberQ: Hvordan reducerer jeg databasebelastningen?
Sektion kaldt “Q: Hvordan reducerer jeg databasebelastningen?”A:
- Cache-forespørgselsresultater:
<?php$cache = xoops_cache_handler::getInstance();$articles = $cache->read('all_articles');
if ($articles === false) { $result = $db->query("SELECT * FROM xoops_articles"); $articles = $result->fetch_all(); $cache->write('all_articles', $articles, 3600);}?>- Arkiver gamle data i separate tabeller
- Ryd op i logfiler regelmæssigt:
# Delete old log entries (older than 30 days)DELETE FROM xoops_log WHERE created < NOW() - INTERVAL 30 DAY;- Aktiver forespørgselscache (MySQL):
SET GLOBAL query_cache_type = 1;SET GLOBAL query_cache_size = 268435456; -- 256 MBAsset Optimization
Sektion kaldt “Asset Optimization”Sp.: Hvordan optimerer jeg CSS og JavaScript?
Sektion kaldt “Sp.: Hvordan optimerer jeg CSS og JavaScript?”A:
1. Formindsk filer:
# Using online tools# - cssminifier.com# - javascript-minifier.com# - minify.org
# Or with command-line toolssudo apt-get install yui-compressor closure-compileryui-compressor file.css -o file.min.css2. Kombiner relaterede filer:
{* Instead of many files *}<link rel="stylesheet" href="{$xoops_url}/themes/{$xoops_theme}/style1.css"><link rel="stylesheet" href="{$xoops_url}/themes/{$xoops_theme}/style2.css"><link rel="stylesheet" href="{$xoops_url}/themes/{$xoops_theme}/style3.css">
{* Combine into one *}<link rel="stylesheet" href="{$xoops_url}/themes/{$xoops_theme}/style.css">3. Udskyd ikke-kritisk JavaScript:
{* Critical JS - load immediately *}<script src="critical.js"></script>
{* Non-critical JS - load after page *}<script src="analytics.js" defer></script><script src="ads.js" async></script>4. Aktiver Gzip-komprimering (.htaccess):
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/xml</IfModule>Q: Hvordan optimerer jeg billeder?
Sektion kaldt “Q: Hvordan optimerer jeg billeder?”A:
1. Vælg det rigtige format:
- JPG: Fotos og komplekse billeder
- PNG: Grafik og billeder med gennemsigtighed
- WebP: Moderne browsere, bedre komprimering
- AVIF: Nyeste, bedste komprimering
2. Komprimer billeder:
# Using ImageMagickconvert image.jpg -quality 85 image-compressed.jpg
# Using ImageOptimimageoptim image.jpg
# Online tools# - imagecompressor.com# - tinypng.com3. Vis responsive billeder:
{* Serve different sizes *}<picture> <source srcset="image-large.webp" type="image/webp" media="(min-width: 1200px)"> <source srcset="image-medium.webp" type="image/webp" media="(min-width: 768px)"> <source srcset="image-small.webp" type="image/webp"> <img src="image.jpg" alt="description"></picture>4. Lazy load billeder:
{* Native lazy loading *}<img src="image.jpg" loading="lazy" alt="description">
{* Or with JavaScript library *}<script src="https://cdn.jsdelivr.net/npm/lazysizes@5/lazysizes.min.js"></script><img src="placeholder.jpg" data-src="image.jpg" class="lazyload" alt="description">Serverkonfiguration
Sektion kaldt “Serverkonfiguration”Q: Hvordan kontrollerer jeg serverens ydeevne?
Sektion kaldt “Q: Hvordan kontrollerer jeg serverens ydeevne?”A:
# CPU and Memorytop -b -n 1 | head -20free -hdf -h
# Check PHP-FPM processesps aux | grep php-fpm
# Check Apache/Nginx connectionsnetstat -an | grep ESTABLISHED | wc -l
# Monitor in real-timewatch 'free -h && echo "---" && df -h'Sp.: Hvordan optimerer jeg PHP til XOOPS?
Sektion kaldt “Sp.: Hvordan optimerer jeg PHP til XOOPS?”A: Rediger /etc/php/8.x/fpm/php.ini:
; Increase limits for XOOPSmax_execution_time = 300 ; 30 seconds defaultmemory_limit = 512M ; 128MB defaultupload_max_filesize = 100M ; 2MB defaultpost_max_size = 100M ; 8MB default
; Enable opcache for performanceopcache.enable = 1opcache.memory_consumption = 256opcache.max_accelerated_files = 20000opcache.validate_timestamps = 0 ; Production: 0 (reload on restart)opcache.revalidate_freq = 0 ; Production: 0 or high number
; Databasedefault_socket_timeout = 60mysqli.default_socket = /run/mysqld/mysqld.sockGenstart derefter PHP:
sudo systemctl restart php8.2-fpm# orsudo systemctl restart apache2Q: Hvordan aktiverer jeg HTTP/2 og komprimering?
Sektion kaldt “Q: Hvordan aktiverer jeg HTTP/2 og komprimering?”A: For Apache (.htaccess):
# Enable HTTPS (required for HTTP/2)<IfModule mod_ssl.c> Protocols h2 http/1.1</IfModule>
# Enable compression<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascript</IfModule>
# Enable browser caching<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType text/javascript "access plus 1 month"</IfModule>For Nginx (nginx.conf):
http { # Enable gzip gzip on; gzip_types text/plain text/css text/javascript application/json; gzip_min_length 1000;
# Enable HTTP/2 listen 443 ssl http2;
# Browser caching expires 1y; add_header Cache-Control "public, immutable";}Overvågning og diagnostik
Sektion kaldt “Overvågning og diagnostik”Q: Hvordan overvåger jeg XOOPS ydeevne over tid?
Sektion kaldt “Q: Hvordan overvåger jeg XOOPS ydeevne over tid?”A:
1. Brug Google Analytics:
- Vitale kernewebområder
- Sideindlæsningstider
- Brugeradfærd
2. Brug serverovervågningsværktøjer:
# Install Glances (system monitor)sudo apt-get install glancesglances
# Or use New Relic, DataDog, etc.3. Log og analysér anmodninger:
# Get average response timegrep "GET /index.php" /var/log/apache2/access.log | \ awk '{print $NF}' | \ sort -n | \ awk '{sum+=$1; count++} END {print "Average: " sum/count " ms"}'Q: Hvordan identificerer jeg hukommelseslækager?
Sektion kaldt “Q: Hvordan identificerer jeg hukommelseslækager?”A:
<?php// In code, track memory usage$start_memory = memory_get_usage();
// Do operationsfor ($i = 0; $i < 1000; $i++) { $array[] = expensive_operation();}
$end_memory = memory_get_usage();$used = ($end_memory - $start_memory) / 1024 / 1024;
if ($used > 50) { // Alert if > 50MB error_log("Memory leak detected: " . $used . " MB");}
// Check peak memory$peak = memory_get_peak_usage();echo "Peak memory: " . ($peak / 1024 / 1024) . " MB";?>Tjekliste for ydeevne
Sektion kaldt “Tjekliste for ydeevne”graph TD A[Performance Optimization Checklist] --> B["Infrastructure"] A --> C["Caching"] A --> D["Database"] A --> E["Assets"]
B --> B1["✓ PHP 8.x installed"] B --> B2["✓ Opcache enabled"] B --> B3["✓ Sufficient RAM"] B --> B4["✓ SSD storage"]
C --> C1["✓ Page caching enabled"] C --> C2["✓ Object caching enabled"] C --> C3["✓ Browser caching set"] C --> C4["✓ CDN configured"]
D --> D1["✓ Indexes added"] D --> D2["✓ Slow queries fixed"] D --> D3["✓ Old data archived"] D --> D4["✓ Query logs cleaned"]
E --> E1["✓ CSS minified"] E --> E2["✓ JS minified"] E --> E3["✓ Images optimized"] E --> E4["✓ Gzip enabled"]Relateret dokumentation
Sektion kaldt “Relateret dokumentation”- Database debugging
- Aktiver fejlretningstilstand
- Modul FAQ
- Ydelsesoptimering
#xoops #performance #optimization #faq #fejlfinding #caching