Heim >Web-Frontend >js-Tutorial >EACT -Leistungsmuster, die jeder Entwickler stehlen sollte (und wie er sie implementiert)
Die Auftriebsleistung der React -App ist für eine positive Benutzererfahrung von entscheidender Bedeutung. In diesem Artikel werden sieben bewährte Leistungsmuster beschrieben, die aus der Optimierung zahlreicher Produktionsreaktionsanwendungen hergestellt wurden.
useMemo
und useCallback
: Problem: unnötige Wiederholer aufgrund unveränderter Requisiten oder Zustand.
Lösung: cache rechnerisch teure Operationen und Funktionsreferenzen.
<code class="language-javascript">const ExpensiveComponent = ({ items }) => { const sortedList = useMemo(() => items.sort((a, b) => a.price - b.price), [items]); const handleClick = useCallback(() => { console.log('Item clicked:', sortedList[0]); }, [sortedList]); return <ChildComponent onClick={handleClick} />; };</code>
Best Practices: Verwenden Sie mit React.memo
für untergeordnete Komponenten, um unnötige Subtree -Updates zu verhindern. Ideal für komplexe Berechnungen (Sortierung, Filterung), Rückrufe an optimierte Kinder und stabile Kontextanbieterwerte.
Problem: Große anfängliche Bundle -Größe, die den ersten inhaltlichen Farben (FCP) beeinflusst.
Lösung: Dynamische Importe und Suspense
für das Laden von On-Demand.
<code class="language-javascript">const HeavyChartLibrary = React.lazy(() => import('./ChartComponent')); const Dashboard = () => ( <React.Suspense fallback={<Spinner />}> {showCharts && <HeavyChartLibrary />} </React.Suspense> );</code>
Fortgeschritten: in den React-Router für Routenbasis aufgeteilt.
.Problem:
Tausende von Elementen überfordern den Dom.
Lösung: react-window
<code class="language-javascript">import { FixedSizeList } from 'react-window'; const BigList = ({ items }) => ( <FixedSizeList height={600} itemCount={items.length} itemSize={35} width="100%"> {({ index, style }) => ( <div style={style}>...</div> )} </FixedSizeList> );</code>
Bonus: VariableSizeList
Verwenden Sie react-virtualized-auto-sizer
für dynamische Zeilenhöhen und
Problem:
Mehrere Statusaktualisierungen, die kaskadierende Wiederherstellungen verursachen.Lösung:
Hebel -Reaktion 18s automatische Charge.reagieren 18:
<code class="language-javascript">setCount(1); setText('Updated'); // Single re-render</code>
vor der Reaktion 18 oder für komplexe Szenarien: useReducer
Verwenden Sie
Problem:
übermäßige API -Anforderungen von schnellen Benutzereingaben (z. B. Suchleisten).
Lösung: useDebounce
ein benutzerdefinierter
<code class="language-javascript">import { useEffect, useState } from 'react'; const useDebouncedValue = (value, delay) => { const [debouncedValue, setDebouncedValue] = useState(value); useEffect(() => { const handler = setTimeout(() => setDebouncedValue(value), delay); return () => clearTimeout(handler); }, [value, delay]); return debouncedValue; };</code>
Pro -Tipp: AbortController
Kombinieren Sie mit
Problem:
unnötige Wiederholer von Kontextverbrauchern aufgrund von nicht verwandten Änderungen.Lösung:
Splesende Kontexte und Memoize -Anbieterwerte.Problem:
langsame Benutzeroberfläche aufgrund des Wartens auf API -Antworten.Lösung: Sofortiges visuelles Feedback und Rollback beim Fehler geben.
Performance -Checkliste:
React.memo
, useMemo
, useCallback
strategisch. Denken Sie daran: Profil zuerst, zweitens optimieren! Diese Techniken sind für verschiedene React -Frameworks (Next.js, Gatsby usw.) anwendbar.
Das obige ist der detaillierte Inhalt vonEACT -Leistungsmuster, die jeder Entwickler stehlen sollte (und wie er sie implementiert). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!