- Add DISCOVERY_LOG_LEVEL=debug - Add DISCOVERY_SHOW_PROGRESS=true - Temporary changes for debugging InitializerProcessor fixes on production
240 lines
5.3 KiB
Markdown
240 lines
5.3 KiB
Markdown
|
|
# 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 `<link rel="prefetch">` 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 (`<link rel="prefetch">`)
|
|
- ✅ 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
|
|
<!-- HTML Attribute -->
|
|
<a href="/important-page" data-prefetch="eager">Important Link</a>
|
|
```
|
|
|
|
```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
|
|
<!-- Eager Prefetch -->
|
|
<a href="/page" data-prefetch="eager">Sofort laden</a>
|
|
|
|
<!-- Kein Prefetch -->
|
|
<a href="/page" data-no-prefetch>Nicht vorladen</a>
|
|
|
|
<!-- View Transition -->
|
|
<a href="/page" data-view-transition>Mit Animation</a>
|
|
|
|
<!-- Modal -->
|
|
<a href="/page" data-modal>Als Modal öffnen</a>
|
|
```
|
|
|
|
## 🌐 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
|
|
}
|
|
```
|