Maison  >  Article  >  interface Web  >  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 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 19:17:03171parcourir

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 approfondissant une solution qui estime la mémoire approximative occupée par ces objets.

Détermination de la taille de l'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

En utilisant 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 approximative de mémoire 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 d'objets et aux fermetures peut introduire une complexité supplémentaire dans la détermination précise de la taille.

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!

Déclaration:
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