"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment pouvons-nous calculer l’empreinte mémoire approximative d’un objet JavaScript ?

Comment pouvons-nous calculer l’empreinte mémoire approximative d’un objet JavaScript ?

Publié le 2024-11-16
Parcourir:138

How Can We Calculate the Approximate Memory Footprint of a JavaScript Object?

Détermination de l'empreinte mémoire des objets JavaScript

En JavaScript, comprendre la consommation de mémoire des objets est crucial pour optimiser les performances et éviter les fuites de mémoire. Cet article aborde la question de l'obtention de la taille d'un objet JavaScript, en explorant une solution qui estime la mémoire approximative occupée par ces objets.

Détermination de la taille d'un objet

Dans JavaScript, il n'existe pas de fonction intégrée spécifiquement conçue pour déterminer la taille d'un objet. Cependant, une technique courante consiste à parcourir les propriétés de l'objet et à calculer la taille de chaque valeur primitive et référence d'objet. Cette estimation prend en compte la taille des types de données, tels que booléen (4 octets), chaîne (longueur * 2 octets) et nombre (8 octets).

Mise en œuvre d'un estimateur de taille d'objet

Pour estimer la taille d'un objet donné, une fonction récursive peut être utilisée :

function roughSizeOfObject(object) {
  const objectList = [];
  const stack = [object];
  let bytes = 0;

  while (stack.length) {
    const value = stack.pop();

    switch (typeof value) {
      case 'boolean':
        bytes  = 4;
        break;
      case 'string':
        bytes  = value.length * 2;
        break;
      case 'number':
        bytes  = 8;
        break;
      case 'object':
        if (!objectList.includes(value)) {
          objectList.push(value);
          for (const prop in value) {
            if (value.hasOwnProperty(prop)) {
              stack.push(value[prop]);
            }
          }
        }
        break;
    }
  }

  return bytes;
}

Exemple

Utilisation de l'exemple fourni :

function Marks() {
  this.maxMarks = 100;
}

function Student() {
  this.firstName = "firstName";
  this.lastName = "lastName";
  this.marks = new Marks();
}

const stud = new Student();
const sizeInBytes = roughSizeOfObject(stud);

console.log(`Object size: ${sizeInBytes} bytes`);

Dans ce scénario, la fonction roughSizeOfObject estime la consommation de mémoire approximative de l'objet stud, y compris ses propriétés et ses objets imbriqués.

Limitations

Il est important de noter que cette technique fournit une approximation et peut ne pas prendre en compte toutes les allocations de mémoire liées à l'objet. De plus, la surcharge associée aux références et aux fermetures d'objets peut introduire une complexité supplémentaire dans la détermination précise de la taille.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3