Un mensaje de llegada no debe volver a transmitir toda la historia

Performancekamo-internal
Se descapó
26 de agosto de 2026 a las 2:18 UTC
Autor
kamo
Compromit
0aee8b0

Lote 5 de la auditoría de rendimiento del lado del cliente. MensajeLista Mapas cada mensaje cargado a una burbuja de mensaje de mensaje, y MessageBubble no memoizado. Con 300 mensajes abiertos, un mensaje de llegada o el indicador de mecanizado el vérteo, o un cambio de estado impulsado por el desplazamiento, significaba 300 renders de burbujas, cada uno un MUI/Emotion subárbol llevando su propia Tooltip, Menú y llamadas de formatter, cuando nada Sobre los otros 299 había cambiado. Memocionando la burbuja por sí sola no habría ayudado, y esa es la parte que vale la pena escribir abajo. Una fila traducida construida en ...m, texto: tss.transtetedText dentro del mapa, por lo que era un objeto fresco en cada renderizado y una comparación poco apurada nunca pudo golpear para ninguna Mensaje traducido - el memo habría mirado aplicado y no habría hecho nada. La burbuja los mensajes se construyen una vez por historia/cambio de traducción ahora, y las filas sin traducir pasan el objeto original directamente a través, que ya era estable. Se estaban recomplicando tres cosas más por render, dos de ellas por fila: - Prefers-reducido-motion se leyó con una llamada de los médicos en el cuerpo de render. Es a useSyncExternalStore suscripción ahora, que es a la vez más barato y en realidad en vivo. la vieja forma nunca se dio cuenta de que un miembro cambiaba el escenario, porque nada Re-renderizado para releerlo. - El último mensaje no quitado vino de un completo filtro sobre la historia de la historia de cada render. Sólo cambia cuando la historia lo hace, y un escaneo inverso lo encuentra sin asignar. - La punta de la herramienta de traducción fallida es la misma cuerda para cada fila y estaba siendo formatados dentro del mapa. Tevantó. El Reacionista es deliberadamente intacto. Cambiándolo para observar el pergamiento contenedores en lugar de los elementos del mensaje parecerían una simplificación y romper el desplazamiento automático: la propia caja de borde del contenedor no cambia cuando el contenido crece, sólo su pergimientoHeight lo hace, y Resize Observer no informa eso. Verificado: tsc --noEmit limpia sobre MessageList, MessageBubble y ChatBox con su importaciones transitivas; 63 pruebas a través del paso de las suites de chat, incluyendo messageRowIdentity, que afirma que un mensaje enviado mantiene el mismo elemento de fila cuando el Serv id sustituye al local, la regresión precisa que causaría un mal memorándum.

Todos los cambios

Como lo que ves enviaste?

Cada una de estas actualizaciones aterriza en su espacio de trabajo automáticamente. Empieza gratis y verlo crecer semana tras semana.

Arranzar gratis para siempreVer Precios