From a4bef860b6d743c78d0aed36c934cc022df37bee Mon Sep 17 00:00:00 2001 From: oobabooga <112222186+oobabooga@users.noreply.github.com> Date: Fri, 13 Mar 2026 06:45:29 -0300 Subject: [PATCH] UI: Optimize chat streaming by batching morphdom to one update per animation frame The monitor physically cannot paint faster than its refresh rate, so intermediate morphdom calls between frames do redundant parsing, diffing, and patching work that is never displayed. --- js/global_scope_js.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/js/global_scope_js.js b/js/global_scope_js.js index 62b31d37..3207a681 100644 --- a/js/global_scope_js.js +++ b/js/global_scope_js.js @@ -269,7 +269,21 @@ function removeLastClick() { document.getElementById("Remove-last").click(); } +let pendingMorphdomData = null; +let morphdomRafId = null; + function handleMorphdomUpdate(data) { + pendingMorphdomData = data; + if (!morphdomRafId) { + morphdomRafId = requestAnimationFrame(() => { + morphdomRafId = null; + applyMorphdomUpdate(pendingMorphdomData); + pendingMorphdomData = null; + }); + } +} + +function applyMorphdomUpdate(data) { // Determine target element and use it as query scope var target_element, target_html; if (data.last_message_only) {