# MYP Platform - Raspberry Pi Performance Optimierung ## Übersicht Diese Dokumentation beschreibt die implementierten Performance-Optimierungen für die MYP Flask-Webapp, um eine optimale Leistung auf Raspberry Pi Hardware zu gewährleisten. ## Implementierte Optimierungen ### 1. Kernel- und System-Optimierungen (setup.sh) #### Kernel-Parameter ```bash # Memory Management vm.swappiness=10 # Reduzierte Swap-Nutzung vm.dirty_ratio=5 # Frühere Disk-Writes vm.dirty_background_ratio=2 # Hintergrund-Writes vm.vfs_cache_pressure=50 # Ausgewogenes Cache-Verhalten # CPU Scheduler kernel.sched_migration_cost_ns=5000000 # Reduzierte CPU-Migration kernel.sched_autogroup_enabled=0 # Deaktivierte Auto-Gruppierung # Filesystem (SD-Card optimiert) vm.dirty_expire_centisecs=500 # Schnellere Daten-Expiration vm.dirty_writeback_centisecs=100 # Häufigere Writebacks ``` #### Service-Deaktivierung - `bluetooth.service` - Bluetooth-Dienst - `cups.service` - Druckerdienst (nicht benötigt) - `avahi-daemon.service` - mDNS-Dienst - `ModemManager.service` - Modem-Manager - `wpa_supplicant.service` - WiFi falls Ethernet verwendet #### tmpfs-Optimierung ```bash # Temporäre Dateien im RAM /tmp tmpfs defaults,noatime,nosuid,size=100M 0 0 /var/tmp tmpfs defaults,noatime,nosuid,size=50M 0 0 /var/log tmpfs defaults,noatime,nosuid,size=50M 0 0 ``` ### 2. Python/Flask-Optimierungen (app.py) #### Speicher-Management ```python # Garbage Collection optimiert gc.set_threshold(700, 10, 10) # Häufigere Bereinigung gc.collect() # Initial cleanup # Memory Limits resource.setrlimit(resource.RLIMIT_AS, (256 * 1024 * 1024, 256 * 1024 * 1024)) ``` #### Flask-Konfiguration ```python # Performance-Optimierungen app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 31536000 # 1 Jahr Cache app.config['JSON_SORT_KEYS'] = False app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False app.config['TEMPLATES_AUTO_RELOAD'] = False ``` #### API-Optimierungen - **Pagination**: Maximale 50 Items pro Request - **Lazy Loading**: Bedarfsgerechtes Laden von Daten - **Cache Headers**: Aggressive Caching-Strategien - **Response Compression**: Gzip-Kompression für alle Responses ### 3. Datenbank-Optimierungen (models.py) #### SQLite-Konfiguration für Raspberry Pi ```python # Reduzierte Cache-Größen 'pool_pre_ping': True, 'pool_recycle': 300, 'connect_args': { 'check_same_thread': False, 'timeout': 30, # Längere Timeouts für SD-Karten 'cached_statements': 100, 'isolation_level': None, 'sqlite_additional_pragmas': { 'cache_size': -32000, # 32MB Cache (reduziert) 'mmap_size': 134217728, # 128MB Memory-mapped I/O 'page_size': 4096, # SD-Card optimiert 'wal_autocheckpoint': 100, # Häufigere WAL-Checkpoints 'max_wal_size': 33554432 # 32MB WAL-Limit } } ``` #### Connection Pooling - **Pool Size**: 3 Verbindungen (reduziert) - **Pool Recycle**: 300 Sekunden - **Timeouts**: 30 Sekunden für SD-Karten-Latenz ### 4. Frontend-Optimierungen #### Critical CSS (critical.min.css) - **Inline-CSS**: Kritische Styles für First Paint - **Minimiert**: Nur essentielle Styles (2.4KB) - **Mobile-First**: Responsive Design optimiert #### JavaScript-Loader (loader.min.js) - **Lazy Loading**: JavaScript nach User-Interaktion - **Cache-Strategie**: Intelligent caching mit Service Worker - **Minimiert**: Kompakte 1.8KB Datei - **SPA-Navigation**: Client-side Routing für bessere Performance #### Service Worker (sw-optimized.js) - **Cache-Limit**: Maximal 50 Einträge für Raspberry Pi - **Intelligente Strategien**: - API: Network First mit Cache Fallback - Statische Assets: Cache First - HTML-Seiten: Network First mit Cache Fallback - **Hintergrund-Sync**: Automatische Datensynchronisation - **Offline-Support**: Vollständige Offline-Funktionalität #### Performance Features ```javascript // Debounce für Events MYP.debounce(func, 250); // Throttle für Scroll-Events MYP.throttle(func, 100); // Lazy Image Loading MYP.lazyImages(); // Cache-Management MYP.cache(url); MYP.store(url, data); ``` ### 5. Build-System-Optimierungen #### Asset-Kompression ```bash # Gzip-Kompression für statische Dateien find static/ -name "*.css" -o -name "*.js" | xargs gzip -k -9 # CSS-Minimierung npx tailwindcss build -i input.css -o critical.min.css --minify # JavaScript-Minimierung npx terser app.js -c -m -o loader.min.js ``` #### Package-Management - **Spezifische Versionen**: Locked versions in package.json - **Minimal Dependencies**: Nur benötigte Pakete - **Production Build**: Optimierte Builds für Deployment ## Performance-Metriken ### Erwartete Verbesserungen - **Ladezeit**: 40-60% Reduktion - **Speicherverbrauch**: 30-40% Reduktion - **CPU-Last**: 25-35% Reduktion - **Netzwerk-Traffic**: 50-70% Reduktion (durch Caching) ### Monitoring ```javascript // Performance-Monitoring in base.html window.addEventListener('load', function() { const loadTime = performance.timing.loadEventEnd - performance.timing.navigationStart; if (loadTime > 3000) { console.warn('Langsame Ladezeit:', loadTime + 'ms'); } }); ``` ## Installation und Verwendung ### Automatische Installation ```bash # Vollständige Installation mit Performance-Optimierungen sudo ./setup.sh # Nur Performance-Optimierungen anwenden sudo ./setup.sh --performance-only ``` ### Manuelle Konfiguration #### 1. Kernel-Parameter anwenden ```bash sudo sysctl -p /etc/sysctl.d/99-myp-performance.conf ``` #### 2. systemd-Dienste deaktivieren ```bash sudo systemctl disable bluetooth cups avahi-daemon ``` #### 3. tmpfs mounten ```bash sudo mount -a ``` #### 4. Python-Optimierungen aktivieren ```bash export PYTHONOPTIMIZE=2 export PYTHONDONTWRITEBYTECODE=1 ``` ## Troubleshooting ### Häufige Probleme #### 1. Hoher Speicherverbrauch ```bash # Memory-Monitoring free -h sudo systemctl status myp-webapp # Log-Analyse tail -f logs/app/app.log ``` #### 2. Langsame Datenbankoperationen ```bash # SQLite-Performance prüfen sqlite3 instance/myp.db ".timer on" "PRAGMA cache_size;" # Index-Optimierung sqlite3 instance/myp.db "ANALYZE;" ``` #### 3. Service Worker Probleme ```javascript // Browser-Konsole navigator.serviceWorker.getRegistrations().then(function(registrations) { registrations.forEach(function(registration) { console.log('SW:', registration.scope, registration.active.state); }); }); ``` ### Performance-Debugging #### 1. Network-Tab - Prüfe Cache-Headers - Identifiziere langsame Requests - Überwache Transfer-Größen #### 2. Performance-Tab - Messe JavaScript-Ausführungszeit - Identifiziere Layout-Thrashing - Überwache Memory-Leaks #### 3. Server-Logs ```bash # Flask-Performance-Logs tail -f logs/app/performance.log # System-Performance htop iotop -a ``` ## Wartung ### Tägliche Tasks ```bash # Cache-Bereinigung (automatisch via Cron) 0 2 * * * /usr/local/bin/cleanup-cache.sh # Log-Rotation 0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/myp-webapp ``` ### Wöchentliche Tasks ```bash # Datenbank-Optimierung 0 1 * * 0 sqlite3 /path/to/myp.db "VACUUM; ANALYZE;" # System-Update mit Performance-Check 0 3 * * 0 /usr/local/bin/system-maintenance.sh ``` ### Monitoring ```bash # Performance-Metriken sammeln */5 * * * * /usr/local/bin/collect-metrics.sh # Alert bei schlechter Performance */10 * * * * /usr/local/bin/performance-alert.sh ``` ## Weitere Optimierungen ### Hardware-spezifisch - **SD-Karte**: Class 10 oder besser verwenden - **RAM**: Mindestens 2GB empfohlen für bessere Performance - **CPU**: Übertaktung wenn Kühlung ausreichend ### Netzwerk - **Ethernet**: Bevorzugt gegenüber WiFi - **QoS**: Traffic-Priorisierung für kritische Services - **DNS**: Lokaler DNS-Cache (unbound) ### Erweiterte Optimierungen - **Redis**: Externes Caching für Skalierung - **nginx**: Reverse Proxy für statische Assets - **Load Balancer**: Mehrere Raspberry Pi für High Availability ## Backup und Recovery ### Automatisches Backup ```bash # Tägliches Backup mit Kompression 0 1 * * * /usr/local/bin/backup-myp.sh --compress --performance-optimized ``` ### Recovery-Prozess ```bash # Schnelle Wiederherstellung sudo ./setup.sh --restore-from-backup --performance-mode # Performance-Check nach Restore sudo ./setup.sh --performance-check ``` --- **Erstellt**: $(date '+%Y-%m-%d %H:%M:%S') **Version**: 1.0 **Status**: Produktionsbereit