# Link Prefetching System ## 🚀 Overview Das erweiterte Prefetching-System für interne Links bietet mehrere Strategien zur Verbesserung der Navigation-Performance: - **Hover Prefetching**: Lädt Seiten vor, wenn der Nutzer mit der Maus über Links fährt - **Visible Prefetching**: Lädt Links, die im Viewport sichtbar werden (Intersection Observer) - **Eager Prefetching**: Sofortiges Laden wichtiger Seiten - **Browser Hints**: Nutzt native `` für optimale Browser-Integration ## 📋 Features - ✅ Multiple Prefetch-Strategien (hover, visible, eager) - ✅ Intersection Observer für sichtbare Links - ✅ Intelligentes Cache-Management mit TTL - ✅ Priority-based Fetching (high/low) - ✅ Network-aware Configuration (4G, 3G, 2G) - ✅ Browser Prefetch Hints (``) - ✅ Abort Controller für Timeout-Management - ✅ Performance Monitoring und Stats ## 🔧 Basic Usage ### Mit dem Router ```js import { startRouter } from './core/router.js'; // Standard-Konfiguration startRouter({ strategies: ['hover', 'visible'], hoverDelay: 150, observerMargin: '50px', maxCacheSize: 20, cacheTTL: 60000 }); ``` ### Adaptive Konfiguration ```js import { startRouter } from './core/router.js'; import { getAdaptiveConfig } from './core/prefetch-config.js'; // Passt sich automatisch an die Netzwerkverbindung an startRouter(getAdaptiveConfig()); ``` ### Direkte API-Nutzung ```js import { getPrefetched, prefetchHref, prefetchUrls } from './core/ClickManager.js'; // Einzelne URL prefetchen prefetchHref('/about'); // Mehrere URLs prefetchen prefetchUrls(['/products', '/contact', '/team']); // Gecachten Content abrufen const html = getPrefetched('/about'); if (html) { render(html); } ``` ## 🎯 Prefetch Strategies ### 1. Hover Strategy Links werden vorgeladen, wenn der Nutzer mit der Maus darüber fährt: ```js { strategies: ['hover'], hoverDelay: 150 // Wartezeit in ms } ``` ### 2. Visible Strategy Links werden vorgeladen, wenn sie in den Viewport kommen: ```js { strategies: ['visible'], observerMargin: '50px' // Lädt 50px bevor Link sichtbar wird } ``` ### 3. Eager Strategy Wichtige Links sofort laden: ```html Important Link ``` ```js // Oder programmatisch prefetchUrls(['/critical-path-1', '/critical-path-2']); ``` ### 4. Combined Strategies Mehrere Strategien kombinieren: ```js { strategies: ['hover', 'visible', 'eager'], // Weitere Optionen... } ``` ## ⚙️ Configuration Options | Option | Type | Default | Description | |--------|------|---------|-------------| | `strategies` | Array | `['hover', 'visible']` | Aktive Prefetch-Strategien | | `hoverDelay` | Number | `150` | Verzögerung vor Hover-Prefetch (ms) | | `observerMargin` | String | `'50px'` | Intersection Observer Margin | | `maxCacheSize` | Number | `20` | Maximale Anzahl gecachter Seiten | | `cacheTTL` | Number | `60000` | Cache-Lebensdauer in ms | | `priority` | String | `'low'` | Fetch Priority (`'low'` oder `'high'`) | ## 📊 Performance Monitoring ```js import { getPrefetcher } from './core/ClickManager.js'; // Stats abrufen const prefetcher = getPrefetcher(); const stats = prefetcher.getStats(); console.log(stats); // { // cacheSize: 5, // prefetching: 2, // prefetched: 10, // strategies: ['hover', 'visible'] // } ``` ## 🎨 HTML Attributes Links können mit speziellen Attributen gesteuert werden: ```html Sofort laden Nicht vorladen Mit Animation Als Modal öffnen ``` ## 🌐 Network-Aware Configuration ```js import { getAdaptiveConfig } from './core/prefetch-config.js'; // Automatische Anpassung basierend auf: // - Connection.effectiveType (4g, 3g, 2g) // - Connection.saveData // - Device capabilities const config = getAdaptiveConfig(); startRouter(config); ``` ## 🚫 Ausnahmen Folgende Links werden nicht geprefetcht: - Externe Links (andere Domain) - Links mit `target="_blank"` - Download Links (`download` Attribute) - Hash Links (`#section`) - Links mit `data-no-prefetch` - `mailto:` und `tel:` Links ## 💡 Best Practices 1. **Mobile First**: Konservative Einstellungen für Mobile 2. **Critical Path**: Wichtige Navigation-Links mit `data-prefetch="eager"` 3. **Monitor Performance**: Cache-Stats überwachen 4. **Network Detection**: Adaptive Config für verschiedene Verbindungen 5. **User Preference**: `prefers-reduced-data` Media Query beachten ## 🔍 Debugging ```js // Debug Logging aktivieren localStorage.setItem('DEBUG', 'true'); // Prefetch Stats const stats = getPrefetcher().getStats(); console.table(stats); // Cache leeren getPrefetcher().clearCache(); ``` ## 🎯 Beispiel-Konfigurationen ### Aggressive (Schnelle Verbindung) ```js { strategies: ['hover', 'visible', 'eager'], hoverDelay: 50, observerMargin: '200px', maxCacheSize: 50, cacheTTL: 300000, priority: 'high' } ``` ### Conservative (Langsame Verbindung) ```js { strategies: ['hover'], hoverDelay: 300, maxCacheSize: 10, cacheTTL: 30000, priority: 'low' } ``` ### Disabled ```js { strategies: [], maxCacheSize: 0 } ```