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

199
Vistas
Devolver copias de objetos con el operador de propagación y efectos en el rendimiento con Javascript

Quería hacer un objeto en el que no pudieras mutar directamente las variables, así que decidí crear lo que es esencialmente una tienda con un reductor similar a redux. Cuando devuelvo la tienda con la función get() , devuelvo una copia de la tienda en lugar de la tienda original, por lo que no se puede mutar directamente. Hay variables en la tienda que quiero que permanezcan intactas en todo el controlador.

Mi pregunta es si hay alguna compensación seria en el rendimiento que deba tener en cuenta al hacer una copia del objeto frente a devolver el objeto completo. La función get() se utilizará mucho, por lo que se realizarán muchas copias. También lo uso en una función requestAnimationFrame donde la función get() se llamará muchas veces para cada animationFrame . Supongo que la copia anterior se eliminará de la memoria cuando ya no esté en uso, pero no estoy seguro.

Aquí hay un ejemplo muy simple.

 const reducer = (store, action) => { switch(action.type) { case 'SET_FOO': return { ...store, foo: action.payload } case 'SET_BAR': return { ...store, bar: action.payload } default: return store } } const createController = () => { let store = { foo: 'foo', bar: 'bar' } const get = () => ({...store}) const dispatch = (action) => (store = reducer(store, action)) // A bunch of other irrelevant functions here return { get, dispatch } }

Como puede ver en la función get() , estoy enviando una copia de la tienda en lugar de la tienda real. De esta manera, es imposible que la persona que crea el controlador mute la tienda directamente. Si acabo de devolver la tienda, podría hacer algo como lo siguiente y mutar directamente la tienda que estoy tratando de evitar.

 const ctl = createController() const store = ctl.get() store.foo = 'baz' console.log(store.get().foo) // result would be 'baz'

Pero si devuelve una copia de la tienda, entonces no podrían mutar directamente la tienda, sino que tendría que enviar al reductor para mutarla. Pero, ¿hay algún problema serio de rendimiento que deba tener en cuenta aquí? Sé que agregar más objetos puede usar más memoria, pero no creo que haga una gran diferencia.

Cualquier idea sería apreciada. Gracias

about 4 years ago · Juan Pablo Isaza
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