DEV Community

Cover image for Elements Kinds
Leonardo Peixoto
Leonardo Peixoto

Posted on

Elements Kinds

Se você usa arrays no JavaScript, o motor V8 está tomando decisões por trás dos panos que podem deixar seu código MUITO mais rápido… ou MUITO mais lento.

E a maioria das pessoas nem percebe 👇

📌 O segredo: *Elements Kinds*

O V8 classifica seus arrays internamente para otimizar execução.
Mas essa otimização depende totalmente de como você usa o array.

🔑 Tipos que o V8 usa

🟢 SMI (inteiros) → mais otimizado

[1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

🟡 DOUBLE (float)

[1, 2.5]
Enter fullscreen mode Exit fullscreen mode

🔴 GENERIC (misturado) → pior cenário

[1, "a", {}]
Enter fullscreen mode Exit fullscreen mode

⚠️ Armadilha crítica (quase ninguém fala disso)

A evolução é irreversível:

SMI → DOUBLE → GENERIC

const arr = [1, 2, 3];
arr.push(1.5); // já piorou
arr.push("x"); // pior ainda
Enter fullscreen mode Exit fullscreen mode

👉 Depois disso, não tem volta.

📦 PACKED vs HOLEY

🚀 PACKED (rápido) → sem buracos

[1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

🐢 HOLEY (lento) → com buracos

const arr = [1, 2, 3];
arr[10] = 5;
Enter fullscreen mode Exit fullscreen mode

👉 Isso força o V8 a fazer mais checks internos.

⚡ O que destrói sua performance

  • Misturar tipos no mesmo array
  • Criar arrays esparsos (buracos)
  • Mudar o tipo ao longo do tempo

🚀 Como escrever código mais rápido

  • Use arrays homogêneos
  • Evite buracos
  • Seja previsível
  • Não “evolua” o array sem necessidade

🧠 Resumo brutal

  • V8 otimiza arrays agressivamente
  • Você pode quebrar isso facilmente
  • Pequenas decisões → grande impacto em escala

Para saber mais segue o post que fala mais a fundo sobre esse assunto.

Top comments (0)