"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como podemos calcular o consumo aproximado de memória de um objeto JavaScript?

Como podemos calcular o consumo aproximado de memória de um objeto JavaScript?

Publicado em 2024-11-16
Navegar:661

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

Determinando o consumo de memória de objetos JavaScript

Em JavaScript, compreender o consumo de memória de objetos é crucial para otimizar o desempenho e evitar vazamentos de memória. Este artigo aborda a questão de obter o tamanho de um objeto JavaScript, aprofundando-se em uma solução que estima a memória aproximada ocupada por tais objetos.

Determinando o tamanho do objeto

Em JavaScript, não existe uma função interna projetada especificamente para determinar o tamanho de um objeto. No entanto, uma técnica comum envolve iterar pelas propriedades do objeto e calcular o tamanho de cada valor primitivo e referência de objeto. Esta estimativa considera os tamanhos dos tipos de dados, como booleano (4 bytes), string (comprimento * 2 bytes) e número (8 bytes).

Implementando um estimador de tamanho de objeto

Para estimar o tamanho de um determinado objeto, uma função recursiva pode ser empregada:

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

Exemplo

Usando o exemplo fornecido:

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

Neste cenário, a função roughSizeOfObject estima o consumo aproximado de memória do objeto Stud, incluindo suas propriedades e objetos aninhados.

Limitações

É importante observar que esta técnica fornece uma aproximação e pode não levar em conta todas as alocações de memória relacionadas ao objeto. Além disso, a sobrecarga associada a referências e fechamentos de objetos pode introduzir complexidade adicional na determinação precisa do tamanho.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3