


RadeventListener: Eine Geschichte der kundenseitigen Framework-Leistung
Reacts Popularität ist nicht ohne Kritiker. Die beträchtliche Größe des Rahmens (ca. 120 KIB Minified) wirkt sich erheblich auf die Startzeiten aus, insbesondere wenn sie sich ausschließlich auf das Kunden-Rendering verlassen. Auch das serverseitige Rendering mit clientseitiger Hydratation bleibt leistungsintensiv. Während React im komplexen Staatsmanagement hervorragend ist, überwiegen seine Ressourcenanforderungen häufig die Vorteile in einfacheren Anwendungen. Dies kann Benutzer mit weniger leistungsstarker Hardware effektiv ausschließen.
Trotz meiner Vorbehalte über Reacts Leistungsaufwand schätze ich das Komponentierungsmodell und die JSX -Syntax. Das serverseitige Rendering (oder die Verwendung von Preact, meine bevorzugte Alternative) bleibt ein wertvolles Gut. Die Ermittlung der entsprechenden kundenseitigen Nutzung bleibt jedoch eine Herausforderung. Dieser Artikel beschreibt meine Ergebnisse zur Optimierung der React -Leistung für eine bessere Benutzererfahrung.
Der Kontext: eine RSS -Feed -App
Meine RSS -Feed -App bylines.fyi
verwendet JavaScript sowohl auf dem Server als auch auf dem Client. Obwohl ich nicht von Kunden auf der Seite nicht mag, unterstreicht meine Erfahrung zwei wiederkehrende Probleme:
- Frameworks können die zugrunde liegende Webplattform verdecken und ein tiefes Verständnis dessen behindern, wann sie wirklich vorteilhaft sind.
- Frameworks garantieren nicht immer optimale Benutzererfahrungen.
Die HTTParchive-Forschung von Tim Kadlec zur Leistung des Web-Frameworks verstärkt diese Bedenken und zeigt die weniger als herausragende Leistung von React. Mein Ziel war es, die serverseitigen Vorteile von React zu nutzen und gleichzeitig seine clientseitigen Nachteile zu mildern.
Das Experiment: Mobile Navigation umschaltet
Meine RSS-App benötigte clientseitige JavaScript für einen einfachen mobilen Navigationschalter-ein klassisches Beispiel für "einfacher Zustand". Ich sehe oft React -Komponenten, die für so einfache Aufgaben überbeansprucht werden, was zu unnötigem Leistungsaufwand führt. Dieses Experiment dient zwar trivial, dient aber als entscheidender Maßstab für das Verständnis, wie Rahmenauswahl skaliert wird. Es ist wichtig zu beachten, dass die meisten Entwickler nicht nur auf React für ein so kleines Merkmal angewiesen sind, aber die Ergebnisse veranschaulichen architektonische Auswirkungen auf die Laufzeitleistung.
Testbedingungen
Das Experiment verglichen drei mobile NAV -Implementierungen auf vier Geräten:
- Stateful React-Komponente: servergerender und clienthydratisiert.
- Stateful Preact Component: servergerender und clienthydratisiert.
- Vorstandsgrüne Vorwirkungskomponente: servergerender, nicht hydratisiert; Verwenden von Standard -Event -Hörern.
Geräte enthalten:
- Nokia 2 Android Phone (Chrome 83)
- ASUS X550CC Laptop (Windows 10, Chrome 83)
- IPhone SE der 1. Generation (Safari 13)
- IPhone SE der 2. Generation (Safari 13)
Metriken
Die folgenden Metriken wurden für jede Implementierung und jedes Gerät gemessen:
- Startzeit: einschließlich Framework -Belastung und Hydratation (React/Preact) oder einfach Event -Listener -Code (EventListener).
- Hydratationszeit: Eine Teilmenge der Startzeit (nur React/Preact).
- Mobile Nav Open Time: Messung des Framework -Overheads bei der Ereignisbehandlung.
Methodik
Das Testen beinhaltete das Debugging und Profiling von Remote, die CPU -Zeit für jede Metrik in zehn Iterationen pro Szenario und Gerät aufzeichnete. Die Netzwerkleistung war kein Faktor.
Ergebnisse
Aufgrund der Komplexität der Daten werden die Ergebnisse im tabellarischen Format dargestellt, das minimale, maximale, mediane und durchschnittliche CPU -Zeiten zeigt. (Detaillierte Tabellen sind in der dazugehörigen Tabelle erhältlich). Zu den wichtigsten Ergebnissen gehören:
- Die hohen Startup- und Hydratationskosten von React: Besonders beim Nokia 2.
- Die verbesserte Leistung von Preact: deutlich schneller als reagieren, aber immer noch die idealen Rahmenbudgets auf dem Nokia 2 überschreitet.
- Überlegene Ereignis -Hörer -Leistung: konsequent schneller als React und Preact, insbesondere für einfache Wechselwirkungen.
Diskussion: flache Anrufstapel
Die Leistungsunterschiede ergeben sich aus dem Overhead der Rahmenbelastung und der Flüssigkeitszufuhr. Während einige Leistungsabschreibungen für Entwicklerkomfort unvermeidlich sind, neigt sich das Gleichgewicht häufig zu stark in Richtung Entwicklererfahrung auf Kosten des Benutzers. Die Call -Stapel für React und Preact Hydratation unterstreichen die erheblichen Verarbeitungsanforderungen, insbesondere für einfache Aufgaben. Die Verwendung von nativen Event -Hörern bietet einen viel effizienteren Ansatz für das einfache Staatsmanagement.
Schlussfolgerung und Empfehlungen
Diese Analyse ist nicht als React -Kritik gedacht, sondern als Ermutigung, die Rahmenauswahl und deren Leistungsauswirkungen kritisch zu bewerten. Mehrere Strategien können Leistungsprobleme mildern:
- Refactor staatliche Komponenten zu Staatlosen Komponenten, sofern möglich.
- Vermeiden Sie JavaScript und Hydratation für clientseitig für Staatelo-Komponenten.
- Verwenden Sie rahmenunabhängige Ereignishörer für einfache Interaktionen.
- Faul hydratische Komponenten mit Intersection Observer oder
requestIdleCallback
. - Betrachten Sie Preact als eine schnellere Alternative zum Reaktieren.
- Passen Sie die Benutzererfahrung für Geräte mit niedrigem Memory mit
navigator.deviceMemory
an.
Priorisieren Sie die Leistungstests auf einer Reihe von Geräten, um die Inklusivität für Benutzer mit unterschiedlichen Hardwarefunktionen sicherzustellen. Das Ziel sollte ein schnelles und zugängliches Web -Erlebnis für alle sein.
Besonderer Dank geht an Eric Bailey für das redaktionelle Feedback und die CSS-Tricks-Mitarbeiter für die Veröffentlichung dieses Artikels.
Das obige ist der detaillierte Inhalt vonRadeventListener: Eine Geschichte der kundenseitigen Framework-Leistung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Haben Sie jemals einen Countdown -Timer für ein Projekt benötigt? Für so etwas ist es möglicherweise natürlich, nach einem Plugin zu greifen, aber es ist tatsächlich viel mehr

Alles, was Sie schon immer über Datenattribute in HTML, CSS und JavaScript wissen wollten.

Zu Beginn eines neuen Projekts erfolgt die SASS -Zusammenstellung im Blinzeln eines Auges. Dies fühlt sich gut an, besonders wenn es mit Browsersync kombiniert ist, das nachlädt

Eine Sache, die mich auf die Liste der Funktionen für Lea Verou im Einklang mit Conic-Gradient () -Polyfill auffiel, war das letzte Element:

Versuchen wir, hier einen Begriff zu prägen: "Statischer Formanbieter". Sie bringen Ihre HTML

Mit der Inline-Template-Anweisung können wir reichhaltige Vue-Komponenten als fortschreitende Verbesserung gegenüber vorhandenem WordPress-Markup erstellen.

Jedes Mal, wenn ich ein neues Projekt starte, organisiere ich den Code, den ich in drei Typen oder Kategorien betrachte, wenn Sie möchten. Und ich denke, diese Typen können auf angewendet werden

PHP -Vorlagen erhält oft einen schlechten Rap für die Erleichterung von unterdurchschnittlichem Code - aber das muss nicht der Fall sein. Schauen wir uns an, wie PHP -Projekte eine Basis durchsetzen können
