Piehnat
Piehnat
Veröffentlicht am
Bits

JavaScript und der Seiten-Speed

Autor

Wenn du eine Website baust, sind Scripts wie Schweizer Taschenmesser. Sie können fast alles erledigen, von Animationen über interaktive Menüs bis hin zu dynamischen Inhalten, gleichzeitig können sie deine Seite aber auch lahmlegen oder Hackern eine Einladung ins Haus schicken. Deshalb lohnt es sich, regelmäßig zu prüfen, welche Scripts laufen, was sie tun und wie man sie optimieren kann, damit die Seite schnell bleibt und niemand aus Versehen ein Tor für Cyber-Idioten öffnet.

Viele nutzen vorgefertigte Code-Schnipsel anderer Entwickler, weil es Zeit spart und Features ermöglicht, die man selbst nur schwer programmieren könnte. Für Anfänger ist das super praktisch, für erfahrene Entwickler eher ein kleiner Zeitgewinn, aber warum sich selbst quälen, wenn andere schon sauber vorgekaut haben? Browser entwickeln sich ständig weiter und bringen Funktionen, die früher nur über komplizierte Scripts gingen. Wer das ignoriert, verpasst, dass die Seite ihr volles Potenzial erreicht.

Lazy-Loading von Bildern ist ein perfektes Beispiel. Früher musste man scroll-Events überwachen und Bild-Links tricksen, damit Bilder erst geladen werden, wenn sie sichtbar sind. Heute reicht ein simples HTML-Attribut:

html

<img src="bild.jpg" loading="lazy" alt="Beispielbild">

loading="lazy" sagt dem Browser automatisch, dass er das Bild erst lädt, wenn der Nutzer darauf scrollt. Kein zusätzlicher JavaScript-Bullshit nötig, weniger Code, schnellere Seite, zufriedene Nutzer.

Scroll-Events wurden früher für Effekte wie klebende Menüs(oder welche fancy Namen sie sonst noch tragen) oder Animationen genutzt. Heute gibt es die IntersectionObserver API. Eine API ist im Endeffekt verkürzt gesagt einfach nur eine Sammlung von Befehlen, die du nutzen kannst, um bestimmte Funktionen im Browser auszuführen. Mit IntersectionObserver kannst du prüfen, wann ein Element im Sichtbereich erscheint:

javascript

let observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if(entry.isIntersecting) {
      entry.target.classList.add('sichtbar');
    }
  });
});

document.querySelectorAll('.animierbar').forEach(el => {
  observer.observe(el);
});

Hier wird jedes Element mit der Klasse .animierbar beobachtet, und sobald es sichtbar wird, bekommt es die Klasse .sichtbar, die z.B. eine Animation in CSS starten kann. Nice und clean clean, kein Scroll-Event-Overkill.

Für Veränderungen auf der Seite, z.B. dynamisch hinzugefügte Inhalte, ist MutationObserver praktisch. Das Script erkennt, wenn sich HTML-Struktur oder Attribute ändern:

javascript

let target = document.getElementById('dynamic-content');
let observer = new MutationObserver((mutations) => {
  mutations.forEach(mutation => {
    console.log('Etwas hat sich geändert:', mutation);
  });
});

observer.observe(target, { childList: true, subtree: true, attributes: true });

Damit siehst du sofort, wenn sich Inhalte ändern, ohne dass du endlos mit Schleifen prüfen musst, bis du eingepennt bist.

Scripts solltest du immer minimieren und komprimieren, damit die Seite schneller lädt. Minimieren entfernt Leerzeichen, Kommentare und Zeilenumbrüche, Komprimieren reduziert die Dateigröße zusätzlich. Bei JavaScript geht das oft besser als bei CSS, aber achte darauf, dass du den Code später noch lesen kannst.

Inline-Scripts sind Scripts direkt im HTML (<script>…</script>). Sie blockieren den Browser, bis sie fertig ausgeführt sind. Das kann das Anzeigen der Seite verzögern. Faustregel: Externe Scripts (<script src="..."></script>) ans Ende der Seite oder mit defer / async laden.

html
<script src="meinscript.js" defer></script>
<script src="analytics.js" async></script>

defer ist perfekt für Scripts, die das DOM manipulieren, async für unabhängige Sachen wie Analytics. Nur winzige oder wirklich kritische Scripts gehören in den Kopf, alles andere blockiert nur die Seite.

Vergiss jQuery. Ja Bruder, ich weiß, viele alte Tutorials schwören drauf, aber moderne Browser können fast alles selbst. Damit sparst du jede Menge unnötigen Ballast und hältst die Seite sauber.

Achte bei neuen Scripts auf Abhängigkeiten. Manche laden externe Dateien nach, die die Ladezeit verlängern. Im Browser siehst du das im Network-Tab der Entwickler-Tools.

Man kann auch einiges an JavaScript durch CSS ersetzen. Zum Beispiel Animationen oder Slider: Das Script muss nur einen Wert ändern, und die Animation läuft im CSS:

html

<div class="slider" data-current-slide="1"></div>
css

.slider[data-current-slide="1"] { transform: translateX(0%); }
.slider[data-current-slide="2"] { transform: translateX(-100%); }
javascript

document.querySelector('.slider').dataset.currentSlide = 2;

Kein unnötiges Script, alles läuft sauber über CSS. Mit SCSS oder Preprozessoren kannst du solche Regeln sogar automatisch generieren.

Analytics ist sicher manchmal nützlich, kann aber auch killen. Viele Tracking-Scripts gleichzeitig bremsen die Seite. Besser konzentrieren auf ein oder zwei Dienste und deren volle Power nutzen, statt alles an ein Dutzend Plattformen zu senden, die du nie auswertest.

Schwere Scripts nur laden, wenn nötig. Chat erst nach Klick, Captcha beim Ausfüllen, interaktive Karten nach Nutzeraktion:

javascript

document.getElementById('loadMap').addEventListener('click', () => {
  let script = document.createElement('script');
  script.src = 'map.js';
  document.body.appendChild(script);
});

So bleibt die Seite flott, und deine Besucher fühlen sich nicht wie in 2003, wo alles ewig lädt.

Am Ende geht es darum, JavaScript mit gesundem Menschenverstand einzusetzen. Überlege, welche Funktionen deine Seite wirklich braucht, prüfe regelmäßig die Scripts und nutze moderne, schlanke Lösungen. Dann bleibt die Seite schnell, sicher und stabil, und du ersparst dir und deinen Nutzern unnötigen Frust.

Hier gibt es keinen Kommentarbereich. Wenn du Fragen oder Anmerkungen zu diesem Post hast, schreib mir gern ne Mail oder blogge selbst dazu. Peace.