Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

156
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!