¿Cuál elegir, Mapa u Objeto?

Resumir

Si puede usar Map, puede usar Map. Object no tiene una ventaja obvia sobre Map.

  1. La cantidad de datos es grande y Map se usa para escritura frecuente.
  2. Hay un requisito para que la orden de escritura use Map

analizar

Objeto

V8 tiene métodos de optimización para el procesamiento de Objetos;

Cuando hay pocas propiedades de objeto o la clave es de tipo numérico, se utilizan propiedades rápidas y las propiedades rápidas se almacenan en una estructura lineal.

Cuando haya más atributos, para garantizar la eficiencia de agregar y eliminar, se utilizarán atributos lentos y el contenido de los atributos se almacenará en forma de pares clave-valor.

Mapa

La estructura de almacenamiento de Map es hashMap

Comparado

  • La clave de Objeto solo puede ser un número, cadena o Símbolo, la clave de Mapa puede ser de cualquier tipo;
  • El mapa es un objeto iterativo; el objeto no se puede iterar;
  • Map registrará el orden de escritura, Object serializará la clave y la ordenará según el diccionario;
  • El mapa tiene varias funciones de operación integradas, el objeto no;

Comparación de operaciones de lectura y escritura

escribe

// 先定义一个数量上限\
const up = 9999

var mt1 = performance.now()
var map = new Map()
for(var i = 0; i < up; i++) {
  map.set(`f${i}`, {a: i, children: { a: i }})
}

console.log(`   Map: `, performance.now() - mt1)

var ot1 = performance.now()
var obj = {}

for (var i = 0; i < up; i++) {
  obj[`f${i}`] = {b: i, children: {a: i}}
}

console.log('Object: ', performance.now() - ot1)
复制代码

Cuando configuro el valor de 499999 hasta , la velocidad de escritura de Objeto comienza a estabilizarse y tarda más que la de Mapa. Cuando es menor que 499999la velocidad del objeto, la relación es mayor, pero la diferencia no es obvia.

leer

// 访问
for (var i = 0; i < up; i++) {
  map.get(`f${i}`)
}
复制代码

En términos de velocidad de lectura,  159999 cuando se establece el valor de arriba, la velocidad de lectura de Objeto será estable y más lenta que la de Mapa.

Eliminar

// 删除
for(var i = 0; i < up; i++) {
  map.delete(`f${i}`)
}
复制代码

En la eliminación, configuro el valor de up para que  199999 sea estable y más lento que la eliminación de Map.

Por lo tanto, en términos de rendimiento, cuando la velocidad de agregar, eliminar y leer es muy pequeña, el rendimiento de Object puede ser ligeramente mejor o incluso no ser obvio. Cuando el número es muy grande, Map funcionará mejor que Object.

Enlace de referencia: La verdad del escenario de la aplicación Map es...

Supongo que te gusta

Origin juejin.im/post/7083827091875037215
Recomendado
Clasificación