Maison > interface Web > js tutoriel > le corps du texte

Optimisation des performances JavaScript : guide complet

DDD
Libérer: 2024-10-23 17:54:51
original
405 Les gens l'ont consulté

JavaScript Performance Optimisation: Comprehensive Guide

JavaScript, étant un langage dynamique, peut parfois entraîner des goulots d'étranglement dans les performances des applications Web. Cependant, avec des techniques d’optimisation minutieuses, vous pouvez améliorer considérablement la vitesse et la réactivité de votre code. Examinons quelques stratégies clés :

Minimiser la manipulation du DOM

Mises à jour du DOM par lots : au lieu d'effectuer des modifications fréquentes du DOM, regroupez-les et mettez-les à jour en une seule opération.
Utiliser des fragments de document : créez un fragment de document pour manipuler des éléments en dehors du DOM, puis insérez-le dans le DOM en une seule opération.

Exploitez innerHTML : pour des modifications à grande échelle, envisagez d'utiliser innerHTML pour définir directement le contenu HTML d'un élément.

Optimiser la gestion des événements

Délégation d'événements : attachez des écouteurs d'événements à un élément parent et utilisez le bouillonnement d'événements pour gérer les événements de ses enfants.
Limitation et anti-rebond : évitez le déclenchement excessif d'événements en limitant (limitation du taux d'événements) ou en anti-rebond (retardant les événements jusqu'à une période d'inactivité).
Supprimer les écouteurs d'événements : lorsqu'un élément n'est plus nécessaire, supprimez ses écouteurs d'événements pour éviter un traitement inutile.

Structures de données et algorithmes efficaces

Choisissez les structures de données appropriées : envisagez d'utiliser des tableaux, des objets, des cartes ou des ensembles en fonction de votre cas d'utilisation spécifique.
Implémentez des algorithmes efficaces : optimisez les algorithmes pour le tri, la recherche et d'autres opérations courantes.
Évitez les calculs inutiles : si une valeur reste constante, calculez-la une fois et stockez-la pour la réutiliser.

Minification et compression du code

Réduisez la taille du fichier : réduisez votre code JavaScript pour supprimer les espaces, les commentaires et les points-virgules inutiles.
Compresser les fichiers : utilisez des techniques de compression telles que Gzip ou Brotli pour réduire davantage la taille du fichier.

Programmation asynchrone

Évitez de bloquer le thread principal : utilisez des opérations asynchrones (par exemple, promesses, async/await) pour empêcher l'interface utilisateur de se bloquer.
Web Workers : déchargez les tâches gourmandes en CPU sur les Web Workers pour éviter de bloquer le thread principal.

Mise en cache et chargement paresseux

Données en cache : stockez localement les données fréquemment utilisées pour réduire les requêtes réseau.
Ressources de chargement paresseux : chargez les ressources uniquement lorsqu'elles sont nécessaires, améliorant ainsi les performances de chargement initial de la page.

Outils de profilage et d'optimisation
Utilisez des outils de développement : Chrome DevTools, Firefox Developer Tools et d'autres outils de navigateur fournissent des fonctionnalités de profilage pour identifier les goulots d'étranglement en matière de performances.

Envisagez des outils tiers : explorez des outils comme Lighthouse ou WebPageTest pour une analyse plus approfondie.

Révision du code et meilleures pratiques

  • Révisions régulières du code : faites réviser votre code par des pairs pour identifier les optimisations potentielles.

  • Suivez les conventions de codage : adhérez aux normes de codage et aux meilleures pratiques pour améliorer la lisibilité et la maintenabilité du code.

En mettant en œuvre ces stratégies, vous pouvez améliorer considérablement les performances de vos applications JavaScript, offrant ainsi une meilleure expérience utilisateur.
N'oubliez pas de mesurer et d'analyser vos améliorations de performances pour vous assurer que vos efforts d'optimisation sont efficaces.

Évaluer les variables locales

JavaScript recherche d'abord localement une variable, puis étend lentement sa portée aux variables globales. Les variables locales sont trouvées sur la base de la portée la plus spécifique à la moins spécifique et peuvent être déplacées à travers différents niveaux de portée.
L'enregistrement des variables dans une portée locale permet à JavaScript d'y accéder rapidement. Gardez à l'esprit que pour définir la portée actuelle, vous devez spécifier la portée et également définir la portée des fonctions en faisant précéder chaque variable de « let » ou « const ». Cela empêche la recherche et accélère également le code.

Utiliser correctement les variables

Il est recommandé d'utiliser les mots-clés let et const lors de la déclaration des variables. L'utilisation de var peut entraîner des erreurs inattendues en raison de son comportement de levage.

Comprendre les déclarations de variables en JavaScript

En JavaScript, les variables sont utilisées pour stocker les valeurs des données. Pour déclarer une variable, vous utilisez les mots-clés var, let ou const. Bien que var ait été utilisé traditionnellement, il est généralement recommandé d'utiliser let et const pour un meilleur contrôle et éviter les pièges potentiels.

Différences clés entre var, let et const

Levage :

var : les variables déclarées avec var sont hissées en haut de leur portée, ce qui signifie qu'elles peuvent être utilisées avant d'être déclarées. Cela peut conduire à un comportement inattendu s'il n'est pas géré avec soin.
let et const : ces mots-clés ne lèvent pas la valeur de la variable, mais ils lèvent la déclaration de variable elle-même. Cela signifie que vous ne pouvez pas utiliser la variable avant qu'elle ne soit déclarée, ce qui évite les erreurs courantes.

Portée:

var : les variables déclarées avec var ont une portée de fonction, ce qui signifie qu'elles sont accessibles dans l'intégralité de la fonction où elles sont déclarées.  
let et const : ces mots-clés ont une portée de bloc, ce qui signifie qu'ils ne sont accessibles que dans le bloc (bloc de code entouré d'accolades) où ils sont déclarés. Cela aide à créer un code plus modulaire et organisé.
Redéclaration :

var : Vous pouvez redéclarer une variable en utilisant var dans la même portée.
let et const : vous ne pouvez pas redéclarer une variable en utilisant let ou const dans la même portée. Cela évite les réaffectations accidentelles et améliore la clarté du code.
Mutabilité :

var et let : les variables déclarées avec var ou let peuvent être réaffectées à de nouvelles valeurs après avoir été déclarées.
const :

Les variables déclarées avec const ne peuvent pas être réaffectées, ce qui les rend immuables.
Cela peut aider à éviter les modifications accidentelles et à améliorer la fiabilité du code.

Meilleures pratiques d'utilisation des variables

Utilisez let pour les variables qui doivent être réaffectées.
Utilisez const pour les variables qui ne doivent pas être réaffectées.
Évitez d'utiliser var sauf en cas d'absolue nécessité.
Déclarez les variables aussi proches que possible de leur utilisation pour améliorer la lisibilité du code.
Soyez conscient de la portée variable pour éviter des conséquences inattendues.

Exemple :

// Using var
var message = "Hello, world!";
console.log(message); // Output: "Hello, world!"

// Redeclaring message using var
var message = "Goodbye!";
console.log(message); // Output: "Goodbye!"

// Using let
let greeting = "Hi there";
console.log(greeting); // Output: "Hi there"

greeting = "Hello again";
console.log(greeting); // Output: "Hello again"

// Using const
const PI = 3.14159;
console.log(PI); // Output: 3.14159

// Attempting to reassign PI (will result in an error)
PI = 3.14;
Copier après la connexion
Copier après la connexion
Copier après la connexion

Comprendre l'optimisation des fonctions en JavaScript

L'optimisation des fonctions est un aspect essentiel de l'écriture d'un code JavaScript efficace. Cela implique d’identifier et de résoudre les goulots d’étranglement en termes de performances qui peuvent ralentir vos applications. Une technique d'optimisation courante consiste à éviter les appels de fonction inutiles, en particulier dans les boucles.

Éviter les appels de fonction inutiles

-Stocker les résultats de la fonction : si une fonction renvoie une valeur constante, stockez le résultat dans une variable en dehors de la boucle et utilisez la variable dans la boucle au lieu d'appeler la fonction à plusieurs reprises. Cela élimine les appels de fonctions redondants et améliore les performances.

-Mémoriser les fonctions : pour les fonctions qui prennent des arguments et renvoient une valeur basée sur ces arguments, pensez à les mémoriser. Cela implique de mettre en cache les résultats des appels de fonction afin que les appels suivants avec les mêmes arguments puissent renvoyer le résultat mis en cache sans réexécuter la fonction.

-Utiliser des expressions de fonction : dans certains cas, l'utilisation d'expressions de fonction au lieu de déclarations de fonction peut offrir des avantages en termes de performances, en particulier lorsqu'il s'agit de fermetures.

JavaScript
// Without optimization
function calculateSquare(x) {
  return x * x;
}

for (let i = 0; i < 1000000; i++) {
  const result = calculateSquare(i);
  // Do something with result
}

// With optimization (storing function result)
const square = calculateSquare;

for (let i = 0; i < 1000000; i++) {
  const result = square(i);
  // Do something with result
}

Copier après la connexion
Copier après la connexion

Dans le code optimisé, la fonction calculateSquare est stockée dans la variable square en dehors de la boucle. Cela élimine le besoin d'appeler la fonction à plusieurs reprises dans la boucle, ce qui entraîne des améliorations significatives des performances.

Conseils d'optimisation supplémentaires

-Évitez les boucles imbriquées : les boucles imbriquées peuvent entraîner une dégradation exponentielle des performances. Si possible, restructurez votre code pour réduire le nombre de boucles imbriquées.
-Utilisez des algorithmes efficaces : choisissez des algorithmes qui ont une complexité temporelle moindre pour les tâches que vous effectuez.
-Profilez votre code : utilisez des outils de profilage pour identifier les goulots d'étranglement des performances et concentrez vos efforts d'optimisation sur les domaines les plus critiques.

Réduire et regrouper

Comprendre la minification et le regroupement en JavaScript

La minification et le regroupement sont des techniques essentielles pour optimiser le code JavaScript et améliorer les performances des applications Web.

Minification

Supprime les caractères inutiles : la minification supprime les espaces, les commentaires et autres caractères non essentiels de votre code JavaScript, réduisant ainsi la taille de son fichier sans affecter ses fonctionnalités.
Améliore les temps de chargement : les fichiers de petite taille se chargent plus rapidement, ce qui se traduit par une meilleure expérience utilisateur.
Peut être fait manuellement ou avec des outils : bien qu'il soit possible de réduire le code manuellement, l'utilisation d'outils automatisés comme UglifyJS ou Terser est beaucoup plus efficace et efficiente.
Regroupement

  1. Combine plusieurs fichiers : le regroupement combine plusieurs fichiers JavaScript en un seul fichier de sortie. Cela réduit le nombre de requêtes HTTP requises pour charger le code JavaScript de votre application, améliorant ainsi les performances.

2.Gestion des modules : les bundles comme Webpack et Gulp peuvent également gérer la gestion des modules, vous permettant d'organiser votre code en composants modulaires et de les charger à la demande.

Avantages de la minification et du regroupement

Temps de chargement plus rapides : des tailles de fichiers réduites et moins de requêtes HTTP entraînent des chargements de pages plus rapides.
Expérience utilisateur améliorée : les utilisateurs sont plus susceptibles de rester engagés sur un site Web qui se charge rapidement.
Meilleur référencement : des temps de chargement plus rapides peuvent améliorer le classement de votre site Web dans les moteurs de recherche.
Meilleures pratiques pour la minification et le regroupement

Utilisez un bundler : Webpack et Gulp sont des choix populaires pour regrouper du code JavaScript.

Configurer la minification : configurez votre bundler pour minimiser automatiquement vos fichiers JavaScript pendant le processus de construction.

Optimisez les images et autres ressources : en plus de JavaScript, réduisez et optimisez d'autres ressources telles que les images et les fichiers CSS pour améliorer encore les performances.
Utilisez un réseau de diffusion de contenu (CDN) : distribuez vos fichiers minifiés et regroupés sur plusieurs serveurs pour améliorer les temps de chargement.

Testez et surveillez : testez régulièrement les performances de votre site Web et surveillez tout problème pouvant survenir après la minification et le regroupement.
Exemple :

// Using var
var message = "Hello, world!";
console.log(message); // Output: "Hello, world!"

// Redeclaring message using var
var message = "Goodbye!";
console.log(message); // Output: "Goodbye!"

// Using let
let greeting = "Hi there";
console.log(greeting); // Output: "Hi there"

greeting = "Hello again";
console.log(greeting); // Output: "Hello again"

// Using const
const PI = 3.14159;
console.log(PI); // Output: 3.14159

// Attempting to reassign PI (will result in an error)
PI = 3.14;
Copier après la connexion
Copier après la connexion
Copier après la connexion

Dans cet exemple, la configuration Webpack est définie en mode production, ce qui active automatiquement la minification et d'autres optimisations.

Comprendre les fuites de mémoire en JavaScript

Des fuites de mémoire se produisent lorsque le code JavaScript conserve involontairement des références à des objets qui ne sont plus nécessaires. Cela peut entraîner une augmentation de la consommation de mémoire au fil du temps, ce qui finit par avoir un impact sur les performances des applications et potentiellement provoquer des plantages.

Causes courantes de fuites de mémoire

-Variables globales : déclarer des variables globalement peut créer involontairement des références à des objets, les empêchant d'être récupérées.
-Écouteurs d'événements : si les écouteurs d'événements ne sont pas supprimés lorsque des éléments sont supprimés du DOM, ils peuvent continuer à contenir des références à ces éléments, les empêchant ainsi d'être récupérés.
-Fermetures : les fermetures peuvent créer par inadvertance des références à des variables qui ne sont plus nécessaires, entraînant des fuites de mémoire.
-Références circulaires : lorsque des objets se référencent les uns les autres de manière circulaire, ils peuvent s'empêcher d'être collectés.

Meilleures pratiques pour éviter les fuites de mémoire

-Utiliser des variables locales : déclarez les variables dans la portée où elles sont nécessaires pour éviter les références globales involontaires.
Supprimer les écouteurs d'événements : lorsqu'un élément n'est plus nécessaire, supprimez ses écouteurs d'événements pour éviter les fuites de mémoire.

-Casser les références circulaires : si des références circulaires sont nécessaires, cassez-les manuellement pour permettre le ramassage des ordures.

-Utiliser des références faibles : dans certains cas, l'utilisation de références faibles peut aider à prévenir les fuites de mémoire en permettant aux objets d'être récupérés même s'ils sont référencés par d'autres objets.
Profilez votre code : utilisez des outils de profilage pour identifier les fuites de mémoire potentielles et suivre la consommation de mémoire au fil du temps.

// Using var
var message = "Hello, world!";
console.log(message); // Output: "Hello, world!"

// Redeclaring message using var
var message = "Goodbye!";
console.log(message); // Output: "Goodbye!"

// Using let
let greeting = "Hi there";
console.log(greeting); // Output: "Hi there"

greeting = "Hello again";
console.log(greeting); // Output: "Hello again"

// Using const
const PI = 3.14159;
console.log(PI); // Output: 3.14159

// Attempting to reassign PI (will result in an error)
PI = 3.14;
Copier après la connexion
Copier après la connexion
Copier après la connexion

Code optimisé :

JavaScript
// Without optimization
function calculateSquare(x) {
  return x * x;
}

for (let i = 0; i < 1000000; i++) {
  const result = calculateSquare(i);
  // Do something with result
}

// With optimization (storing function result)
const square = calculateSquare;

for (let i = 0; i < 1000000; i++) {
  const result = square(i);
  // Do something with result
}

Copier après la connexion
Copier après la connexion

Dans le code optimisé, l'écouteur d'événements est supprimé avant que l'élément ne soit supprimé du DOM, évitant ainsi une fuite de mémoire.

En suivant ces directives, vous pouvez écrire du code JavaScript plus robuste, maintenable et sans erreur.

Bon codage !

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!