
Die Geschwindigkeit einer Website ist kein Luxus – sie ist eine entscheidende Geschäftskennzahl. Die Daten sind überzeugend:
Die Geschwindigkeit einer Website ist kein Luxus – sie ist eine entscheidende Geschäftskennzahl. Die Daten sind überzeugend:
Jede Millisekunde zählt. Dieser Artikel behandelt umfassende Strategien, um Ihre Websites blitzschnell zu machen.
Entfernen Sie Leerzeichen, Kommentare und unnötige Zeichen aus HTML, CSS und JavaScript. Moderne Build-Tools erledigen dies automatisch:
# Using Terser for JavaScript
npx terser input.js -o output.min.js --compress --mangle
# Using cssnano via PostCSS
npx postcss input.css -o output.min.css --use cssnano
# Using html-minifier
npx html-minifier input.html -o output.min.html --collapse-whitespace
Auswirkungen – Durch die Minimierung werden die Dateigrößen normalerweise um 30–60 % reduziert.
Bilder machen auf den meisten Websites über 50 % des Seitengewichts aus.
Moderne Formate:
Responsive Bilder:
<img
src="photo-800.jpg"
srcset="photo-400.jpg 400w, photo-800.jpg 800w, photo-1200.jpg 1200w"
sizes="(max-width: 600px) 100vw, 50vw"
alt="Description"
loading="lazy"
/>
Werkzeuge:
Auswirkung – Durch die richtige Bildoptimierung kann das Seitengewicht um 60–80 % reduziert werden.
Code-Splitting unterteilt Ihr JavaScript in Blöcke, die bei Bedarf geladen werden:
// React lazy loading
const Dashboard = React.lazy(() => import('./Dashboard'));
// Webpack dynamic import
import(/* webpackChunkName: "chart" */ './Chart').then(module => {
module.renderChart();
});
Tree Shaking beseitigt toten Code. Webpack, Rollup und esbuild entfernen ungenutzte Exporte während der Bündelung. Stellen Sie sicher, dass Sie ES-Module („Import“/„Export“) verwenden, damit Tree Shaking effektiv funktioniert.
Caching dient zuvor abgerufenen Ressourcen aus dem lokalen Speicher und vermeidet Netzwerkanfragen vollständig.
# Apache .htaccess
<FilesMatch "\.(ico|pdf|jpg|jpeg|png|gif|js|css|svg|woff2)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
# Nginx
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
Verwenden Sie für HTML-Dateien kürzere Cache-Zeiten („max-age=0, must-revalidate“) oder ETags zur Aktualitätsvalidierung.
Servicemitarbeiter fungieren im Browser als programmierbarer Netzwerk-Proxy:
// service-worker.js
const CACHE_NAME = 'v1';
const urlsToCache = ['/', '/styles.css', '/app.js'];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME).then(cache => cache.addAll(urlsToCache))
);
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(response => {
// Cache-first strategy for static assets
return response || fetch(event.request);
})
);
});
Caching-Strategien für Servicemitarbeiter:
| Strategie | Anwendungsfall |
|---|---|
| Cache zuerst | Statische Assets (Bilder, CSS, JS) |
| Netzwerk zuerst | API-Aufrufe, dynamische Inhalte |
| Veraltet während der erneuten Validierung | Newsfeeds, Blogbeiträge |
| Nur Netzwerk | Formulare, Zahlungs-APIs |
Ein CDN (Content Delivery Network) speichert Inhalte auf geografisch verteilten Edge-Servern zwischen. Beliebte Anbieter:
Auswirkung – CDN-Caching reduziert die Serverlast um mehr als 80 % und verkürzt die Latenz für globale Benutzer um 50–80 %.
Die HTML-Analyse wird angehalten, wenn der Browser auf die Tags „“ oder „“ stößt. Dadurch wird das Rendern blockiert.
<!-- Async: download in parallel, execute as soon as downloaded -->
<script async src="analytics.js"></script>
<!-- Defer: download in parallel, execute in order after HTML parsing -->
<script defer src="app.js"></script>
Faustregel:
Extrahieren und Inline-CSS, das für „above thefold“-Inhalte benötigt wird:
<head>
<style>
/* Inlined critical CSS */
header { background: #333; color: white; }
.hero { min-height: 80vh; display: flex; align-items: center; }
/* ... only what's visible on initial load */
</style>
<!-- Deferred non-critical CSS -->
<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
</head>
Tools: Critical (Node.js), Penthouse und Webpack-Critical generieren automatisch Inline-CSS.
<!-- Preload critical resources early -->
<link rel="preload" href="hero-image.webp" as="image">
<!-- Preconnect to third-party origins -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://api.example.com">
<!-- Prefetch resources needed on the next page -->
<link rel="prefetch" href="next-page.html">
Der kritische Rendering-Pfad ist die Abfolge von Schritten, die der Browser zum Rendern einer Seite durchführt. Durch die Optimierung wird die Zeit bis zur Interaktion verkürzt.
| Protokoll | Hauptmerkmale |
|---|---|
| HTTP/1.1 | Eine Anfrage pro Verbindung (begrenzt) |
| HTTP/2 | Multiplexing, Server Push, Header-Komprimierung, Binärprotokoll |
| HTTP/3 | Die QUIC-basierte Null-RTT-Verbindung bewältigt Paketverluste besser |
HTTP/2 macht die Bündelung weniger kritisch – Sie können viele kleine Dateien ohne den Verbindungsaufwand von HTTP/1.1 bereitstellen.
# Enable Brotli (preferred, ~20% better than Gzip)
brotli on;
brotli_types text/plain text/css application/json application/javascript;
# Fallback Gzip
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1000;
gzip_vary on;
Die Core Web Vitals von Google sind die drei Kennzahlen, die das Nutzererlebnis am meisten beeinflussen:
Misst die Ladeleistung. Das größte sichtbare Element (Hero-Bild, Überschrift) muss schnell gerendert werden.
Optimierung:
<img src="hero.webp" fetchpriority="high" alt="Hero">
Misst die Interaktivität. Im Jahr 2024 durch INP (Interaction to Next Paint) ersetzt.
Optimierung:
Misst die visuelle Stabilität. Elemente sollten sich nicht unerwartet verschieben.
Optimierung:
img, video {
width: 100%;
height: auto;
aspect-ratio: 16 / 9;
}
/* Reserve space for dynamic content */
.ad-container {
min-height: 250px;
}
Natives Lazy Loading wird in allen modernen Browsern unterstützt:
<img src="photo.webp" loading="lazy" alt="Lazy loaded image">
<iframe src="map.html" loading="lazy"></iframe>
Verwenden Sie für ältere Browser den Kreuzungsbeobachter als Fallback:
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
observer.unobserve(img);
}
});
});
document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img));
<!-- DNS prefetch resolves domain names early -->
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<!-- Preconnect establishes full connection (DNS + TCP + TLS) -->
<link rel="preconnect" href="https://fonts.googleapis.com">
/* Font-display controls how fonts render while loading */
@font-face {
font-family: 'CustomFont';
src: url('custom-font.woff2') format('woff2');
font-display: swap; /* Show fallback text immediately */
}
/* Subset fonts to include only needed characters */
/* Use variable fonts for multiple weights in one file */
| Werkzeug | Typ | Am besten für |
|---|---|---|
| Leuchtturm | Labor | Auditierung und Empfehlungen |
| PageSpeed-Einblicke | Labor + Feld | Google-spezifische Messwerte |
| WebPageTest | Labor | Detaillierte Wasserfallanalyse |
| Chrome DevTools | Labor | Netzwerk, Leistung, Abdeckung |
| Sentry-Leistung | RUM | Echte Benutzerüberwachung |
| Datadog RUM | RUM | End-to-End-Leistungsverfolgung |
| Kaliber | Kontinuierlich | Leistungsbudgets und CI |
| Leuchtturm CI | CI | Rückschritte verhindern |
Legen Sie ein Leistungsbudget fest, um Rückschritte zu verhindern:
{
"budgets": [
{
"resourceType": "total",
"budget": 500000
},
{
"resourceType": "script",
"budget": 150000
},
{
"resourceType": "image",
"budget": 200000
},
{
"timing": {
"metric": "interactive"
},
"budget": 5000
}
]
}
Web-Performance ist eine kontinuierliche Disziplin. Beginnen Sie mit den Elementen mit der größten Wirkung:
Leistungsoptimierung ist nie „fertig“ – sie erfordert ständige Aufmerksamkeit, aber der Return on Investment in Benutzerzufriedenheit, Conversions und SEO ist beträchtlich.
Noch keine freigegebenen Kommentare sichtbar. Neue Antworten können moderiert werden.