Un messaggio in arrivo non dovrebbe ridare tutta la storia

Performancekamo-internal
Spegnimento
26 agosto 2026 alle ore 02:18 UTC
Autore
kamo
Impegno
0aee8b0

Batch 5 dell'audit delle prestazioni lato cliente. MessageList mappa ogni messaggio caricato su un MessageBubble, e MessageBubble non era Memoizzato. Con 300 messaggi aperti, un messaggio in arrivo — o l'indicatore di digitazione flipping, o un cambiamento di stato a scorrimento - significava 300 renders di bolla, ciascuno un Subtree MUI/Emotion che trasporta le proprie chiamate Tooltip, Menu e formtter, quando nulla circa gli altri 299 erano cambiati. Memoizzare la bolla da solo non avrebbe aiutato, e questa è la parte che vale la pena scrivere giù. Una riga tradotta costruita `{ ...m, testo: ts.translated Testo }` dentro la mappa, quindi era un oggetto fresco su ogni rendering e un confronto superficiale non poteva mai colpire messaggio tradotto — il promemoria avrebbe guardato applicato e fatto nulla. La bolla i messaggi sono costruiti una volta per storia / cambiamento di traduzione ora, e le righe non tradotte passano l'oggetto originale dritto attraverso, che era già stabile. Altre tre cose venivano ricomputate per render, due per fila: - `prefers-reduced-motion` è stato letto con un matchMedia chiamata nel corpo di rendering. È a useSyncExternalStore abbonamento ora, che è sia più economico e in realtà live — la vecchia forma non ha mai notato un membro cambiare l'impostazione, perché niente riscattato per rileggerlo. - L'ultimo messaggio non rimosso è venuto da un `filter` completo sopra la storia su ogni render. Cambia solo quando la storia e una scansione inversa lo trova senza allontanarsi. - Il tooltip non riuscito-traduzione è la stessa stringa per ogni riga e stava essendo formattato all'interno della mappa. Hoisted. Il ResizeObserver è deliberatamente intatto. Passarlo per osservare la pergamena contenitore invece degli elementi del messaggio sembrerebbe una semplificazione e sarebbe break auto-scroll: la scatola di confine del contenitore non cambia quando il contenuto cresce, solo il suo scrollHeight lo fa, e ResizeObserver non lo riferisce. verificato: tsc --noEmit clean over MessageList, MessageBubble e ChatBox con loro Importazioni transitorie; 63 test attraverso il pass chat suite, compreso messaggioRowIdentity, che afferma un messaggio inviato mantiene lo stesso elemento di riga quando il server id sostituisce quello locale — la regressione precisa un cattivo memo causerebbe.

Tutte le modifiche

Come quello che vedi la spedizione?

Ognuno di questi aggiornamenti atterra automaticamente nello spazio di lavoro. Inizia gratis e guardalo crescere settimana dopo settimana.

Inizia gratis per sempreVisualizza il prezzo