Maison > interface Web > js tutoriel > Maîtriser les performances de React : un guide du développeur pour éviter les rendus inutiles

Maîtriser les performances de React : un guide du développeur pour éviter les rendus inutiles

Barbara Streisand
Libérer: 2025-01-04 21:47:41
original
144 Les gens l'ont consulté

Mastering React Performance: A Developer

Le DOM virtuel et l'architecture basée sur les composants de React le rendent incroyablement efficace, mais sans une optimisation appropriée, votre application peut toujours souffrir de problèmes de performances. Examinons les stratégies éprouvées pour éliminer les rendus inutiles et améliorer les performances de votre application React.

Comprendre les rendus : la Fondation

Avant d'optimiser, nous devons comprendre quand et pourquoi les composants React sont restitués :

  • Quand l'état d'un composant change
  • Quand ses accessoires changent
  • Lorsque son composant parent est restitué

Tous les rendus ne sont pas mauvais, mais les rendus inutiles peuvent avoir un impact sur les performances. Voyons comment les prévenir.

1. React.memo : votre première ligne de défense

const MovieCard = React.memo(({ title, rating, onLike }) => {
  console.log(`MovieCard rendered: ${title}`);
  return (
    <div className="card">
      <h3>{title}</h3>
      <span>Rating: {rating}/10</span>
      <button onClick={onLike}>Like</button>
    </div>
  );
});

// Usage
<MovieCard 
  title="Inception" 
  rating={9.3} 
  onLike={() => handleLike('inception')} 
/>
Copier après la connexion

? Conseil de pro : bien que React.memo soit puissant, utilisez-le de manière stratégique. Tout mémoriser peut en fait nuire aux performances.

2. useCallback : références de fonctions de stabilisation

const MovieList = () => {
  const [movies, setMovies] = useState([]);

  const handleLike = useCallback((movieId) => {
    setMovies(prevMovies => 
      prevMovies.map(movie => 
        movie.id === movieId 
          ? { ...movie, likes: movie.likes + 1 }
          : movie
      )
    );
  }, []); // Empty deps array as it only uses setState

  return movies.map(movie => (
    <MovieCard
      key={movie.id}
      {...movie}
      onLike={() => handleLike(movie.id)}
    />
  ));
};
Copier après la connexion

3. useMemo : mise en cache de calculs complexes

const MovieAnalytics = ({ movies }) => {
  const statistics = useMemo(() => ({
    averageRating: movies.reduce((acc, m) => acc + m.rating, 0) / movies.length,
    topRated: [...movies].sort((a, b) => b.rating - a.rating)[0],
    totalLikes: movies.reduce((acc, m) => acc + m.likes, 0)
  }), [movies]);

  return (
    <div>
      <h2>Analytics Dashboard</h2>
      <p>Average Rating: {statistics.averageRating.toFixed(1)}</p>
      <p>Most Popular: {statistics.topRated.title}</p>
      <p>Total Likes: {statistics.totalLikes}</p>
    </div>
  );
};
Copier après la connexion

4. Meilleures pratiques de gestion de l'État

Relever l'état (si nécessaire)

const MovieApp = () => {
  const [favorites, setFavorites] = useState(new Set());

  // Lifted state handler
  const toggleFavorite = useCallback((movieId) => {
    setFavorites(prev => {
      const next = new Set(prev);
      if (next.has(movieId)) next.delete(movieId);
      else next.add(movieId);
      return next;
    });
  }, []);

  return (
    <div>
      <MovieList onFavorite={toggleFavorite} />
      <FavoritesList ids={favorites} />
    </div>
  );
};
Copier après la connexion

5. Techniques d'optimisation avancées

Hooks personnalisés pour une logique complexe

function useMovieData(movieId) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    let mounted = true;

    async function fetchMovie() {
      setLoading(true);
      try {
        const response = await fetch(`/api/movies/${movieId}`);
        const movie = await response.json();
        if (mounted) {
          setData(movie);
          setLoading(false);
        }
      } catch (error) {
        if (mounted) {
          console.error('Failed to fetch movie:', error);
          setLoading(false);
        }
      }
    }

    fetchMovie();
    return () => {
      mounted = false;
    };
  }, [movieId]);

  return { data, loading };
}
Copier après la connexion

6. Profilage et débogage

Utiliser les outils de développement React

  • Activer le profileur des outils de développement React
  • Enregistrer les rendus des composants
  • Identifier les nouveaux rendus inutiles
  • Mesurer les durées de rendu

Liste de contrôle des performances

✅ Utilisez React.memo pour les composants fonctionnels purs
✅ Implémentez useCallback pour les gestionnaires d'événements passés en tant qu'accessoires
✅ Appliquez useMemo pour les calculs coûteux
✅ Évitez la création d'objets en ligne dans les rendus
✅ Utilisez les accessoires clés appropriés dans les listes
✅ Profilez régulièrement votre application

Pièges courants à éviter

❌ Sur-optimisation
❌ Optimisation prématurée
❌Tout mémoriser
❌ Création de nouveaux objets/tableaux dans le rendu
❌ Imbrication profonde de composants

Regard vers l'avenir : React 19 et performances

React 19 apporte des améliorations automatiques des performances :

  • Lot automatique amélioré
  • Rendu simultané amélioré
  • Meilleure planification des mises à jour d'état

Conclusion

L'optimisation des performances dans React est un équilibre entre la complexité du code et les gains de performances réels. Commencez par les bases, mesurez les performances de votre application et optimisez-la si nécessaire. N'oubliez pas : l'optimisation prématurée est la racine de tous les maux !

✨ J'espère que cela vous a été utile ! N'oubliez pas de m'aimer et de me suivre pour plus de trucs et astuces React !

? Suivez-moi sur X (Twitter) et LinkedIn pour des conseils et des informations quotidiens sur le développement Web !

? Continuez à coder, continuez à créer et continuez à vous améliorer !

Je vous souhaite à tous succès et positivité en cette merveilleuse journée. Rendons-le incroyable ensemble ! ?

réagir #javascript #webdev #performance

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal