El desarrollador de Letta Desktop descubrió que el origen de un cuello de botella en su aplicación no era un bucle lento ni código sin optimizar, sino un uso inadecuado de la propiedad scrollHeight al forzar el desplazamiento automático del área de chat hacia abajo con cada mensaje nuevo. El código empleado era aparentemente inofensivo: el.scrollTop = el.scrollHeight. El problema es que, pese a lo que sugiere su nombre y la documentación, scrollHeight no es un valor estático en los navegadores modernos. En Blink (el motor de Chromium), cada acceso a esa propiedad dispara una actualización de estilos y de maquetación del nodo, lo que resulta especialmente costoso cuando llegan muchos mensajes en tiempo real y la operación se ejecuta de forma continua. La conclusión del autor es clara: las propiedades de solo lectura no son sinónimo de bajo coste, sobre todo cuando su valor cambia con el estado del DOM. Como solución práctica, propone sustituir el cálculo preciso del desplazamiento por un valor numérico muy alto (por ejemplo, el.scrollTop = el.scrollHeight + 9999 o un literal grande), ya que el navegador limitará el resultado al máximo permitido de todas formas. La entrada incluye además el fragmento relevante del código fuente de Blink para que el lector verifique el comportamiento y entiende la lección aplicable a cualquier framework o librería web: revisar qué operaciones se ejecutan en cada actualización y evitar forzar recálculos implícitos en bucles de renderizado.
