Skip to content

ui: Fix excessive style recalculation on hover#24243

Merged
allozaur merged 1 commit into
ggml-org:masterfrom
ntowle:scrollperf
Jun 9, 2026
Merged

ui: Fix excessive style recalculation on hover#24243
allozaur merged 1 commit into
ggml-org:masterfrom
ntowle:scrollperf

Conversation

@ntowle

@ntowle ntowle commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Overview

There's currently a transition for scrollbar-color applied to every element on the page with a 0.2s duration, as well as a :hover for every element on the page that changes scrollbar-color. This is causing excessive style recalculation as well as noticeable lag during certain UI interactions in Chrome. I checked a few browser/OS combos and I'm unsure if this transition is even doing anything from a functional standpoint.

Additional information

I first noticed this when expanding/collapsing the reasoning block. With a sufficient amount of elements on the page (after several messages, especially with math) the reasoning block was taking around 1s to collapse, during which time the page seemed to be frozen. Removing this transition allows the reasoning blocks to be collapsed instantly.

After digging into this a bit further, I noticed excessive render time just from moving the mouse in and out of the viewport - this scales with the number of elements on the page. Example of this below, comparing before and after this change:

Before:
image
6356 elements invalidated:
image

After:
image
27 elements invalidated:
image

As you can see in the after, the number of elements invalidated (6356->27) and time spent rendering (1705ms->554ms) are greatly reduced, but still not 0. There are still a few elements (notably button.svelte) that include the transition-all class, through which scrollbar-color is still animated. I left those as-is because I was unsure which of their properties were intended to be animated.

The excessive time spent here is likely a bug in Chromium. I can repro in Chrome+Edge, but not in Firefox.

Requirements

@ntowle ntowle requested a review from a team as a code owner June 6, 2026 19:45
@allozaur allozaur requested a review from ServeurpersoCom June 9, 2026 09:00
@allozaur allozaur merged commit ae735b1 into ggml-org:master Jun 9, 2026
6 checks passed
@ntowle ntowle deleted the scrollperf branch June 9, 2026 13:14
Jcfunk added a commit to Jcfunk/llama.cpp that referenced this pull request Jun 11, 2026
* upstream/HEAD: (329 commits)
  vendor : update LibreSSL to 4.3.2 (ggml-org#24397)
  Remove padding and multiple D2D copies for MTP (ggml-org#24086)
  chat: fix LFM2/LFM2.5 ignoring json_schema (ggml-org#24377)
  CUDA: Fix ssm_scan_f32 data-races (ggml-org#24360)
  ci : bump komac version (ggml-org#24396)
  speculative : fix "ngram-map-k4v" name in logging (ggml-org#24253)
  webui: implement pinned conversations support (ggml-org#21387)
  graph: Fix granite speech model inference by applying embedding scale when deepstack is not used (ggml-org#24357)
  ci : fix windows release (ggml-org#24369)
  ui: add opt-in run_javascript frontend tool (ggml-org#24244)
  mtmd: build_vit batching (ggml-org#24352)
  vulkan: reduce iq1 shared memory usage for mul_mm (ggml-org#24287)
  vulkan: add `v_dot2_f32_f16` support in matrix-matrix multiplication and Flash Attention (ggml-org#24123)
  ui: Fix excessive style recalculation on hover (ggml-org#24243)
  mtmd: refactor video subproc handling (ggml-org#24316)
  server: log prompts to directory (ggml-org#22031)
  ui: fix mobile chat form overflow and bust stale bundle cache (ggml-org#24158)
  ggml : add GGML_OP_COL2IM_1D (ggml-org#24206)
  server : do not clear slots without unified KV cache (ggml-org#24190)
  models : fix plamo2 attention_key/value_length regression (ggml-org#24317)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants