Zum Inhalt springen

Performanceoptimierung in der Webentwicklung

Die Performanceoptimierung ist in der Webentwicklung entscheidend, um schnelle, reaktionsschnelle und effiziente Webanwendungen zu gewährleisten. Dieser Leitfaden behandelt Techniken zur Optimierung der DOM-Manipulation, zum Verständnis und zur Vermeidung von Layout-Thrashing, zum Batching von DOM-Änderungen sowie zur Verwendung von document.createDocumentFragment() für eine verbesserte Performance.

Performance verbessern

Techniken zur Optimierung der DOM-Manipulation

  1. DOM-Zugriff minimieren: Der Zugriff auf und die Änderung des DOM sind langsam. Reduzieren Sie die Anzahl der DOM-Zugriffe, indem Sie Referenzen auf DOM-Elemente zwischenspeichern und direkte Manipulationen minimieren.
  2. Effizientes Event-Handling: Delegieren Sie Events an ein übergeordnetes Element, anstatt sie an jedes untergeordnete Element anzuhängen. Dies reduziert die Anzahl der Event-Listener und verbessert die Performance.
  3. Effiziente Selektoren verwenden: Optimieren Sie Ihre Selektoren. Bevorzugen Sie getElementById oder querySelector mit spezifischen Selektoren und vermeiden Sie zu komplexe oder tief verschachtelte Descendant-Selektoren.
  4. Unnötige Layouts vermeiden: Vermeiden Sie das Erzwingen unnötiger Reflows und Repaints, indem Sie Layoutänderungen minimieren und CSS-Klassen anstelle von Inline-Stilen für mehrere Änderungen verwenden.
  5. Virtuelles DOM: Erwägen Sie die Verwendung von Bibliotheken, die ein virtuelles DOM implementieren (wie React), um DOM-Änderungen zu optimieren und zu bündeln.

Layout-Thrashing verstehen und vermeiden

Was ist Layout-Thrashing?

Layout-Thrashing tritt auf, wenn eine Reihe von JavaScript-Operationen den Browser dazu zwingen, das Layout wiederholt zu berechnen. Dies geschieht, wenn Sie schnell nacheinander aus dem DOM lesen und darin schreiben, was zu mehreren Reflows und Repaints führt.

Layout-Thrashing vermeiden

  1. Lese- und Schreiboperationen bündeln: Fassen Sie alle Leseoperationen zusammen und alle Schreiboperationen zusammen, um Layout-Thrashing zu vermeiden.
  2. requestAnimationFrame verwenden: Planen Sie DOM-Lese- und Schreibvorgänge mit requestAnimationFrame, um sicherzustellen, dass sie im nächsten Animationsframe ausgeführt werden.

Beispiel:


javascript
let width = element.offsetWidth; // Read operation
element.style.width = (width + 10) + 'px'; // Write operation

Verbessert:


javascript
requestAnimationFrame(() => {
    const width = element.offsetWidth; // Read operation
    element.style.width = (width + 10) + 'px'; // Write operation
});

DOM-Änderungen bündeln

Verwendung von document.createDocumentFragment() zum Bündeln von Änderungen

document.createDocumentFragment() ist ein leichtgewichtiger Container, der einen Teil der DOM-Struktur aufnehmen kann. Änderungen, die an einem DocumentFragment vorgenommen werden, wirken sich nicht auf das aktive DOM aus, was es zu einer effizienten Methode zum Bündeln von DOM-Aktualisierungen macht.

Beispiel:


html
<!DOCTYPE html>
<html>
<head>
    <title>Batching DOM Changes</title>
</head>
<body>
    <div id="container"></div>

    <script>
        const container = document.getElementById('container');
        const fragment = document.createDocumentFragment();

        for (let i = 0; i < 40; i++) {
            const div = document.createElement('div');
            div.textContent = `Item ${i}`;
            fragment.appendChild(div);
        }

        container.appendChild(fragment); // Batch update
    </script>
</body>
</html>

Dieses Beispiel zeigt die Erstellung eines DocumentFragment, das Anhängen mehrerer Elemente daran und das anschließende Anhängen des Fragments an das DOM in einer einzigen Operation, was Reflows und Repaints reduziert.

Best Practices

  1. Nicht-kritischen JavaScript verschieben: Verwenden Sie das Attribut defer in Script-Tags, um das Blockieren der DOM-Parsing zu verhindern.
  2. Asynchrones Laden für Scripts verwenden: Laden Sie Scripts asynchron, wo immer möglich, um das Blockieren des Renderings zu verhindern.
  3. CSS-Neuberechnungen minimieren: Reduzieren Sie die Komplexität Ihrer CSS-Selektoren und vermeiden Sie Inline-Stile, wo immer möglich.
  4. Performance profilieren und überwachen: Profilen Sie Ihre Anwendung regelmäßig mit den Entwicklertools des Browsers, um Performance-Engpässe zu identifizieren und zu beheben.

INFO

Minimieren Sie Layout-Thrashing, indem Sie alle DOM-Leseoperationen zusammenfassen und anschließend alle Schreiboperationen separat ausführen. Dies reduziert die Anzahl der Reflows und Repaints und steigert die Performance erheblich.

Fazit

Die Optimierung der DOM-Manipulation und das Verständnis, wie der Browser Layouts verarbeitet, sind entscheidend für die Erstellung hochperformanter Webanwendungen. Durch das Bündeln von DOM-Änderungen, das Vermeiden von Layout-Thrashing und die Anwendung von Best Practices wie document.createDocumentFragment() können Sie die Performance und Reaktionsfähigkeit Ihrer Webanwendungen erheblich verbessern.

Praxis

Welche der folgenden Techniken sind wichtig für die Optimierung der DOM-Performance?

Finden Sie das nützlich?

Dual-run-Vorschau — vergleichen Sie mit den Symfony-Routen live.