La semana pasada hablamos de #debounce. #throttle es una función hermana de esta.
Throttle es una función que recibe 2 args: la función a ejecutar y un tiempo de bloqueo.
Cuando la función se ejecuta, el tiempo comienza a correr y bloquea cualquier otra ejecución.
Veamos el problema!
Tenemos una función que imprime texto en la consola.
El entrevistador solamente dirá: "ok, programa un throttle"
Si no sabes que es un throttle, te lo explicará. Pero son puntos menos, cuidado! 🚨
Throttle y debounce son tools básicas para todo frontend.
Este es el problema:
- Tenemos una función logger, que imprime el texto en consola
- La función es llamada muchas veces!
- Queremos bloquear las llamadas de la función por 200ms.
Antes de continuar, se te ocurre una forma de hacer esto?
Para bloquear la llamada, un setTimeout sera más que suficiente. Y podemos asignar su existencia a una variable para estar al tanto de si esta corriendo el tiempo y evitar ejecutar la función en caso de que sea llamada.
Pongamos todo junto.
Paso a paso
- Usamos throttle y creamos una nueva función con los args logger y el tiempo de bloqueo: 200ms
- Usamos esta nueva función
- Y como vemos en la consola: solo se imprimen dos valores. Los demás no pudieron porque intentaron correr cuando la función estaba bloqueada.
Ahora bien: para que sirve throttle en la vida real?
Para muchísimas cosas, sobretodo de performance!
Un caso muy común es en el evento scroll. Este evento se dispara muchísimas veces, y si tienes animaciones que dependan de este evento, puedes perder FPS.
Usando throttle, puedes bloquear el callback del scroll cada cierto tiempo, en la suposición de que tantas llamadas no te van a dar datos significativos para animar algo (por ejemplo, animar un header!)
Este tipo de ejercicios prueban dos cosas:
- Tu experiencia práctica siendo FrontEnd
- Descubrir si conoces como funcionan las herramientas del día a día (porque debounce y throttle vienen incluidas en #lodash)
Nos vemos pronto en otro thread de "Entrevistas para #javascript developers en #FAANG"!
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Antes que nada, tenemos que saber que curry es un concepto de functional programming (uno de mis temas favoritos!)
Imagina que tienes una función suma.
Suma recibe 3 argumentos y regresa la suma de ellos.
Es un caso super común! Pero qué tal si queremos tener la opción de enviarle los argumentos 1 a 1, en diferentes tiempos, y que se ejecute "mágicamente" hasta que tenga todos?
Esto es el concepto de curry, y en este caso es una "curried function"
Varios de estos recursos los sigo leyendo cada cierto tiempo, y son excelentes para prepararse en la entrevista especializada de Front End de las empresas grandes en Silicon Valley / #FAANG
[1/x]
Eloquent Javascript: mi biblia de JS enfocado al browser. Desde APIs del DOM hasta técnicas para mejorar el performance de las aplicaciones web.
Si tuvieras que elegir un libro de esta lista, que sea este.
Marca un antes y después como developer.
#CSS Secrets: Cuando empecé mi carrera como front end, odiaba CSS.
Este libro me abrió la mente para descubrir que no lo odiaba, sino que no lo entendía. Y va mucho más allá: no solo ser técnico, pero creativo al crear una UI.
En lo que tengo mi break del segundo día de on boarding en #Google, les dejo uno de mis tools favoritos para codear: hablemos de terminales.
lightning #thread ⚡️🧵