"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo podemos calcular la huella de memoria aproximada de un objeto JavaScript?

¿Cómo podemos calcular la huella de memoria aproximada de un objeto JavaScript?

Publicado el 2024-11-16
Navegar:741

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

Determinación de la huella de memoria de los objetos JavaScript

En JavaScript, comprender el consumo de memoria de los objetos es crucial para optimizar el rendimiento y evitar pérdidas de memoria. Este artículo aborda la consulta de obtener el tamaño de un objeto JavaScript, profundizando en una solución que estima la memoria aproximada que ocupan dichos objetos.

Determinación del tamaño del objeto

En JavaScript, no existe una función incorporada diseñada específicamente para determinar el tamaño de un objeto. Sin embargo, una técnica común implica iterar a través de las propiedades del objeto y calcular el tamaño de cada valor primitivo y referencia de objeto. Esta estimación considera los tamaños de los tipos de datos, como booleanos (4 bytes), cadenas (longitud * 2 bytes) y números (8 bytes).

Implementación de un estimador del tamaño de objetos

Para estimar el tamaño de un objeto determinado, se puede emplear una función recursiva:

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;
}

Ejemplo

Usando el ejemplo proporcionado:

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`);

En este escenario, la función grossSizeOfObject estima el consumo de memoria aproximado del objeto stud, incluidas sus propiedades y objetos anidados.

Limitaciones

Es importante tener en cuenta que esta técnica proporciona una aproximación y es posible que no tenga en cuenta todas las asignaciones de memoria relacionadas con el objeto. Además, la sobrecarga asociada con las referencias y cierres de objetos puede introducir una complejidad adicional a la hora de determinar con precisión el tamaño.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3