Introduction
React est conçu pour être performant, mais certaines pratiques peuvent ralentir une application, surtout à grande échelle. L'optimisation des performances consiste à utiliser des stratégies permettant de minimiser les rendus inutiles, de réduire la charge du CPU et d'améliorer la réactivité.
Table des matières
Toggle1. Utiliser le React.memo
pour les composants fonctionnels
Qu'est-ce que c'est ? React.memo
est une fonction d'ordre supérieur qui permet d'éviter des rendus inutiles d'un composant fonctionnel si ses props n'ont pas changé.
Quand l'utiliser ? Utilise React.memo
lorsque tu as des composants qui reçoivent des props qui ne changent pas fréquemment.
const MyComponent = React.memo(function MyComponent({ name }) { console.log('Rendering MyComponent'); return{name}; });
2. Utiliser le useMemo
pour mémoriser les résultats des calculs
Qu'est-ce que c'est ? useMemo
est un hook qui permet de mémoriser le résultat d'une fonction coûteuse en termes de calcul et de ne recalculer la valeur que lorsque les dépendances changent.
Quand l'utiliser ? Utilise useMemo
lorsque tu as des calculs lourds ou des objets qui sont passés en props à des composants enfants.
const expensiveValue = useMemo(() => { return expensiveComputation(a, b); }, [a, b]);
3. Utiliser le useCallback
pour mémoriser les fonctions
Qu'est-ce que c'est ? useCallback
est un hook qui permet de mémoriser une fonction et de ne la recréer que lorsque ses dépendances changent.
Quand l'utiliser ? Utilise useCallback
lorsque tu passes des fonctions en props à des composants enfants pour éviter que ces composants ne se re-rendent inutilement.
const handleClick = useCallback(() => { console.log('Button clicked'); }, []); // `handleClick` ne change jamais
4. Optimiser les listes avec React.PureComponent
Qu'est-ce que c'est ? React.PureComponent
est une classe de base pour les composants qui implémentent une comparaison superficielle des props et de l'état (shallow comparison). Cela permet de rendre uniquement les composants dont les props ou l'état ont changé.
Quand l'utiliser ? Utilise PureComponent
pour les composants de type classe où tu souhaites éviter les rendus inutiles.
class MyComponent extends React.PureComponent { render() { return{this.props.name}; } }
5. Code Splitting et Lazy Loading
Qu'est-ce que c'est ? Le code splitting permet de diviser le code JavaScript en plusieurs morceaux (chunks), de manière à ne charger que le code nécessaire à un moment donné. Le lazy loading permet de charger un composant ou une ressource seulement lorsqu'il/elle est nécessaire.
Quand l'utiliser ? Utilise le code splitting et lazy loading pour améliorer le temps de chargement de l'application, surtout pour les applications React complexes.
import React, { Suspense, lazy } from 'react'; const LazyComponent = lazy(() => import('./LazyComponent')); function App() { return (Loading...
6. Virtualisation des listes avec react-window
ou react-virtualized
Qu'est-ce que c'est ? La virtualisation consiste à rendre uniquement les éléments visibles dans une liste au lieu de rendre tous les éléments de la liste, ce qui peut améliorer considérablement les performances lors du rendu de longues listes.
Quand l'utiliser ? Utilise la virtualisation des listes pour les grandes listes où chaque élément peut être coûteux à rendre.
import { FixedSizeList as List } from 'react-window'; function App() { return ({({ index, style }) =>
); }Item {index}}
7. Éviter les rendus non nécessaires avec shouldComponentUpdate
Qu'est-ce que c'est ? La méthode shouldComponentUpdate
permet de contrôler manuellement si un composant doit se re-rendre ou non en fonction des props et de l'état.
Quand l'utiliser ? Utilise shouldComponentUpdate
dans des composants de classe lorsque tu veux avoir un contrôle total sur les rendus.
class MyComponent extends React.Component { shouldComponentUpdate(nextProps, nextState) { return nextProps.name !== this.props.name; } render() { return{this.props.name}; } }
8. Optimisation du rendu avec les Clés dans les listes
Qu'est-ce que c'est ? Lors de l'affichage de listes dynamiques avec map
, React utilise des clés pour identifier les éléments et optimiser les rendus. Utilise des clés uniques pour améliorer les performances de mise à jour.
Quand l'utiliser ? Utilise des clés uniques lorsque tu rends des éléments dans une liste afin que React puisse gérer efficacement les ajouts, suppressions et réorganisations d'éléments.
const items = ['Item 1', 'Item 2', 'Item 3']; return (
-
{items.map((item, index) => (
- {item} ))}
Résumé des stratégies d'optimisation des performances
- React.memo : Pour éviter les rendus inutiles des composants fonctionnels.
- useMemo : Pour mémoriser les résultats des calculs coûteux.
- useCallback : Pour éviter la recréation de fonctions à chaque rendu.
- React.PureComponent : Pour les composants de classe afin d'éviter les rendus inutiles.
- Code Splitting et Lazy Loading : Pour charger uniquement les parties nécessaires de l'application.
- Virtualisation des listes