Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

168
Vistas
¿Hay alguna forma de ahorrar espacio en las claves de los objetos JS?

Justo estaba pensando en la siguiente situación:

Digamos que tenemos una definición de línea como la que se muestra a continuación. Aquí el comienzo y el final son ambos puntos.

 let line = { start: {x:0, y:0}, end: {x:0,y:0}, orientation: 'vertical' }

Ahora imagine que tenemos una gran variedad de líneas, ¿cómo ahorramos espacio? Sé que puede reemplazar el valor de orientación 'vertical' con un Enum. Pero, ¿puede ahorrar espacio en los nombres clave sin reducir la legibilidad? Por ejemplo, puede reemplazar la orientation con o , pero ahora ya no está claro qué significa la clave.

¡Hágamelo saber!

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Si se refiere al uso de la memoria, los motores Javascript son muy inteligentes en estos días, cosas como el uso de búsquedas de claves internas, la desduplicación de cadenas, etc., hacen que tener nombres de claves cortos o largos tenga muy poco efecto.

Por ejemplo, usando su estructura de datos anterior, introduje 1 millón de registros en una matriz, uno con nombres de clave muy largos y otro con nombres de clave de 1 carácter. En ambos casos, el uso de memoria por elementos resultó en unos 147 bytes. Además, incluso usar una const para la vertical tuvo poco efecto.

Pero como puede ver, 147 bytes parece alto, por lo que si quisiera reducir esto, necesitaría usar TypedArrays, desafortunadamente, estos pueden ser un poco más difíciles de razonar. Pero si la memoria fuera una preocupación, podría valer la pena el esfuerzo.

Si usó TypedArray, podría usar getters y setters para hacer esto mucho más fácil. Y al hacer esto, tal vez podría usar 33 bytes por registro, 4 dobles y 1 byte.

Pero antes de hacer nada, primero me aseguraría de que sea necesario hacer este tipo de optimización. La optimización previa de Javascript es una tontería.

PD. Hice las pruebas de memoria usando NodeJs, que básicamente usa el motor Javascript de Chrome.

Además, si desea jugar con la forma en que se afecta la memoria y tiene NodeJs instalado, aquí hay un código de ejemplo para comenzar.

 const oused = process.memoryUsage().heapUsed; const values = []; for (let l = 0; l < 1000000; l += 1) { values.push({ start: { x: 0, y: 0 }, end: { x: 0, y: 0 }, orientation: "vertical", }); } console.log(process.memoryUsage().heapUsed - oused);
about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay una representación de una línea que logra un equilibrio entre la usabilidad y la eficiencia de la memoria. No utiliza identificadores de cadena porque las posiciones de los datos están codificadas en el tipo. También usa matrices estándar porque no especificó el tamaño del plano de coordenadas cartesianas (por lo que no puedo sugerir un contenedor delimitado como TypedArray):

Parque infantil TS

 type Point = [x: number, y: number]; type Line = [a: Point, b: Point]; const line: Line = [[0, 0], [0, 2]]; // More memory efficient: 2 fewer arrays per line: type CompactLine = [...a: Point, ...b: Point]; const compactLine: CompactLine = [0, 0, 0, 2];
about 4 years ago · Juan Pablo Isaza Denunciar

0

Le sugiero que cree un mapa para todas las versiones abreviadas de las claves y use el mapa en paralelo con su objeto. El mapa puede tener las claves de objeto como las claves del mapa y la forma completa como los valores

 const map = new Map() const object = { o: 4 } // o means orientation map.set("o", "orientation") const mapKeys = Array.from(map.keys()) const redeableObj = {} mapKeys.forEach(key => { const redeableKey = map.get(key) redeableObj[redeableKey] = object[key] }) console.log(object) console.log(redeableObj)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda