Heatmap rendering performance when many slider steps
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 18.3k
- Forks
- 2k
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 28
Description
Hi,
This one is somehow related to https://github.com/plotly/plotly.js/issues/6521 but slightly different.
-
when working with 1000 slider steps (Plotly slider), the rendering of this heatmap is quite slow (between 1 and 2 frames per second when moving the slider): https://jsfiddle.net/wh1o2pyq/1/
-
When working with 50 slider steps (Plotly slider), the rendering is super fast (more than 10 fps): https://jsfiddle.net/wh1o2pyq/2/
-
When working with 1000 slider steps but with a HTML slider instead of the Plotly slider (
<input type="range">), it is super fast: https://jsfiddle.net/5L9ykt76/
TL;DR: Plotly slider with many hundreds of steps seems to be a bottleneck for heatmap rendering
Does this mean the slider itself is re-rendered for each update, making the whole thing slow?
I believe that solving this issue could have massive improvement on the responsiveness of every Plotly/Dash dashboard using sliders :)
Any idea?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the three linked JSFiddle reproductions, comparing the Plotly slider with 50 and 1000 steps against the HTML range slider. Profile slider updates and heatmap rendering to identify the bottleneck; done means the 1000-step Plotly slider responds substantially faster without changing the reported heatmap behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- data-visualization, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100