Juan Castro
ProfesorHilo de memes del caché :point_down:
Lautaro Strappazzon
Lautaro Strappazzon
Y ahora vengo del futuro (la próxima clase), ya que ahora sí entendí este meme:
Optimizar el consumo de una API REST desde el frontend no significa hacer que internet vaya más rápido, sino evitar peticiones innecesarias. Aquí entran dos estrategias clave: caché y memoization, pensadas para quienes desarrollan aplicaciones JavaScript que dependen de datos externos.
En una aplicación web hay dos frentes de optimización. Por un lado, el backend trabaja con bases de datos, herramientas como Redis y otras técnicas que aceleran la respuesta del servidor. Por otro lado, el frontend tiene su propio terreno: decidir cuándo vale la pena hacer una solicitud HTTP y cuándo no. Y ese es justo el punto donde caché y memoization marcan la diferencia.
¿Qué es el caché del navegador y cómo ayuda a optimizar peticiones HTTP?
El caché es la forma en que le indicas al navegador cómo manejar la información que ya descargaste. Cuando usas Fetch, Axios o cualquier cliente HTTP, puedes pedirle que siempre traiga la última versión desde la API o, al contrario, que reutilice la información guardada localmente si ya la pediste antes.
¿Qué es el caché en el frontend? Es un mecanismo del navegador que guarda respuestas HTTP previas para reutilizarlas y evitar volver a pedirlas al backend. [02:15]
El problema clásico aparece con las preguntas incómodas: ¿cuánto tiempo lleva esa información ahí?, ¿sigue actualizada?, ¿hubo cambios en el backend desde entonces? Por eso existe ese meme en programación: usar caché es lo mejor y lo peor que te puede pasar. La buena noticia es que los navegadores modernos ya traen una configuración por defecto que valida estos casos por ti y funciona bien para la mayoría de escenarios.
¿Qué es la memoization en JavaScript y cuándo conviene usarla?
La memoization lleva la lógica de "no repetir trabajo" al código JavaScript. En lugar de delegarle al navegador, eres tú quien guarda los resultados en un objeto, un array o la estructura de datos que prefieras, y consulta esa estructura antes de hacer un cálculo o una petición.
El ejemplo más conocido es Fibonacci. Si calculas la secuencia de atrás hacia adelante o al revés, terminas repitiendo cálculos enormes una y otra vez. Si guardas los resultados intermedios, simplemente los lees cuando los necesitas y la aplicación deja de demorarse.
La lógica básica es así:
¿Cuál es la diferencia entre caché y memoization? El caché lo gestiona el navegador a nivel de petición HTTP. La memoization la gestionas tú dentro del código JavaScript con tus propias estructuras de datos. [05:40]
¿Por qué la memoization se pierde al recargar la página?
Una consideración clave: las modificaciones que haces en JavaScript solo viven en tiempo de ejecución. En cuanto refrescas la página, cierras el navegador o apagas la computadora, esos objetos desaparecen.
Si quieres que la información memorizada sobreviva a una recarga, necesitas combinar la estrategia con almacenamiento local, usando herramientas como local storage o session storage. Sin eso, cada nueva sesión empieza desde cero.
¿Cuál es el mayor riesgo del caché y la memoization?
El problema central de ambas estrategias es el mismo: ¿cómo sabes si la información cambió en el backend después de tu primera solicitud? Si un usuario cargó datos hace un rato y vuelve a entrar, no tienes forma directa de saber si en ese lapso algo se actualizó del lado del servidor.
Hay aplicaciones donde esto no importa mucho porque la información cambia poco. Pero imagina aplicar esto a un banco: si hiciste una transacción y la app sigue mostrándote el saldo viejo porque lo tiene en caché o memorizado, el resultado sería terrible. La aplicación no se entera del cambio en el backend si no vuelve a consultarlo.
¿Cuándo no debes usar caché ni memoization? Cuando trabajas con datos críticos que cambian constantemente, como saldos bancarios, inventarios en tiempo real o transacciones financieras. [08:20]
¿Qué estrategia conviene para Platzi Movies con la API de TheMovieDB?
La decisión depende del tipo de datos que manejes. En un catálogo de películas, la información cambia con poca frecuencia, así que tanto el caché como la memoization pueden funcionar bastante bien y reducir peticiones repetidas a la API.
Algunas preguntas que te ayudan a decidir:
Cuéntame en los comentarios cuál estrategia usarías para Platzi Movies con la API de TheMovieDB, qué ventajas y desventajas le ves a cada una, o si prefieres dejar el funcionamiento por defecto sin aplicar ninguna optimización.
Juan Castro
ProfesorHilo de memes del caché :point_down:
Lautaro Strappazzon
Lautaro Strappazzon
Y ahora vengo del futuro (la próxima clase), ya que ahora sí entendí este meme:
maximo galarza
recuerden no es lo mismo ++Memoization++ que ++Memorization++
Bramucci Candela
Pensé que era un typo 😬
Ricardo Alfonso Chavez Vilcapoma
Según Wiki si lo es 👀
Ricardo Andres Ojeda Silva
Puedo decir por mi experiencia que el memorization no es el ideal a la hora de hacer una single page application, o al menos en este caso. Cuando estuve haciendo mi proyecto del curso práctico de Consumo de API REST quise utilizar memorization y me di cuenta que al recargar las páginas quedaban en blanco a no ser que estuviese en el home.
LEONARD CUENCA
Clase 2: Caché vs. memoria
Cache
kaSH no le digan cachePropiedades
Memorization
Pasos
Posibles Problemas
Henry Alexander Velásquez Rosas
IPA: kˈæʃ
Jonathan Javier Barsky
Memoization no me parece recomendable con paginas que reciban datos en tiempo real
Oscar Fuentes Esteves
Sí, yo también creo que era una práctica de otros tiempos donde la red era lenta y los equipos de cómputo poco poderosos. Con redes 5G y el poder de cómputo actual no parece tan "necesario" perder 2 milisegundos en recargar datos sensibles o actuales.
¿Qué importa mas, un tuit actual que se "dibuje lento" o un tuit viejo que se "dibuje" rápido?
Diego Reyes Cabrera
Quizas el problema no sea la velocidad de internet del cliente, sino la capacidad de respuesta del servidor... y por eso se necesite ahorrar peticiones si es necesario
Christian Velázquez
Exactamente antes de comenzar estaba pensando repetir el curso pasado con la API de Platzi, y me surgió ésta misma pregunta: Cómo saber cuándo el backend (productos), ya no existe o ya no tiene el mismo número de productos. Cómo reducir el tiempo de carga.
Consideraría utilizar chaché.
Fernando Orozco Velasquez
En las lecturas que encontré sobre este tema, leí que no es recomendable hacer “Memoization” en funciones que no seas “puras” (Functional Programming), es decir que es mejor hacerlo en funciones que siempre devuelven el mismo resultado cuando reciben el mismo argumento.
El caché puede ser buena opción porque el navegador ya trata de optimizarlo por defecto, así mientras el navegador mejora el funcionamiento de la página nosotros podemos optimizar otras partes de nuestro código, aunque también consideraría usar LocalStorage o SessionStorage…
Juan Castro
ProfesorMe encantaría echarle un ojo a esa lectura
Fernando Orozco Velasquez
Si no estoy mal es una lectura tuya jeje, aqui esta el link.
Corrígeme si no capte bien la idea del la lectura 😅
Gilbert Ardila
Yo creo que en este caso, y mientras llega el 5g, lo más factible para usar en este proyecto es caché, pero con 5g no creo que se necesite nada de eso, porque la latencia ya no va a existir
Jefred Bedoya
Optimización de Consumo de API REST en Frontend
La optimización en frontend no busca acelerar la red, sino evitar peticiones innecesarias mediante dos estrategias fundamentales:
1. Caché (Navegador)
2. Memorización (Código JavaScript)
Consideración Crítica: La Frescura de los Datos
El mayor riesgo de ambas estrategias es la desincronización. Si el backend cambia la información, el frontend podría seguir mostrando datos obsoletos. Evaluar si la aplicación requiere datos en tiempo real (ej. aplicaciones bancarias) es vital para decidir si es seguro implementar estas técnicas.
Federico Ivan Llano
Comiezo de Cache
Juan Fernando Yepes Muñoz
Probablemente me equivoque pero voy con todo mi dinero a que la mejor sería caché. Diría yo que sería la mejor porque de esa forma le vamos a permitir al usuario una navegación más ágil casi siempre, mientras que con memoization solo sería más ágil mientras use el sitio, si se le va luz pues F. . Estoy seguro? No sé, pero voy a confiar y encomendarme a Juandc para que todo salga bien
Fernando Yutiz
Para la aplicación de PlatziMovies usaría la estrategia de Memoization. Considero que no pueden haber grandes cambios en una sesión, por ende con consultar al backend una sola vez bastaría.
Carlos Augusto Rodríguez Miranda
Posible solución:
Actualmente la aplicación Platzi Movies, la carga es aceptable demora un poco en la carga de imágenes por la calidad de las mismas. El uso de cache pude ser útil para ciertas secciones en la app que no cambian como lo es la búsqueda por categoría. En la sección del código que crea las películas por ser algo que varia constantemente es mejor el uso de memorización guardando los datos en un objeto que contenga la información y le póster de las películas
RAÚL ERNESTO VELÁSQUEZ VELASCO
Cache navegador, funciona para proyectos como por ejemplo el consumo de noticias, multimedia o datos relacionados con informacion catastral cuyas actualizaciones son lentas o deben pasar por un proceso de autorizacion para modificar datos.
La memorizacion podria servir por ejemplo para consultar datos de placas de vehiculos, el objeto revisa si la placa aun existe y si existe usas la data sin ejecutar la llamada en el entendido que los datos del auto asosiados a esa placa no van a cambiar casi nunca. Si el objeto revisa que la placa ya no existe en el registro publico o es otra placa y no esta en la memoria deberia hacer la llamada y traer la respuesta.
Julian Franco
En el curso de SP del profe Oscar hay una parte que se maneja el Router en un objeto esto seria una especie de Memorization ?
Juan Castro
ProfesorNo exactamente. Hay muchas formas de crear tu propio router. Yo elegí hacerlo con la función de router y con hash navogation. Oscar lo hizo directamente con las rutas sin hashes. Y por cada ruta / propidad del objeto de rutas renderiza una ruta distinta. Eso también es una forma excelente de trabajar. . Memoization sería que todos los resultados de fetchs los guardara en un objeto y en cada consulta verificara primero si ya ese objeto de consultas (ojo, consultas, no rutas) ya tienee la información que está buscando.
Julian Franco
Super profe ! De verdad que muchisimo más claro ! y gracias por el tiempo de responder, tengo otra pregunta ¿Por qué los comentarios o preguntas no se pueden editar ?
No me di cuenta que habia escrito mal el Memoization !!!! Perdón
Ana Rotela Cabrera
Para el ejemplo de PlatziMovies lo mejor seria usar cache
Ulqernesh Karvenae
El de películas usaria el de cache ya que no creo que se agregen tantas peliculas por dia, en la parte de memory la usaria para un banco ya que normalmente cuando hay una transacción y esta es realizada y aun no carga con refrescar la pagina se ve el movimiento .
Ricardo Alfonso Chavez Vilcapoma
No tengo experiencia con ambas tecnologías, pero según lo explicado por el profe en clase podría decir que caché sería lo ideal para evitar la pérdida de datos al recargar la página con memorization, a no ser que se use localStorage.