redraw <chart type> with no changes is not a noop (svg mocks)
Ouverte
Personne n'a encore pris cette issue.
bug
testing
- Langage dominant
- JavaScript
- Étoiles
- 18.3k
- Forks
- 2k
- Merge moyen
- 2 j 12 h
- PR mergées (30 j)
- 28
Description
- We traced it back to 2.24.0 (https://github.com/plotly/plotly.js/releases/tag/v2.24.0), which includes a group of PR's that correspond to the exact same figure types that are failing. For example, in the sunburst PR, there's a line that updates the trace marker color.
- From @alexcjohnson:
- In sunburst/style.js (which is part of the plotting pipeline) we have
if(marker.pattern) { if(!marker.colors || !marker.pattern.shape) marker.color = cdi.color; } else { marker.color = cdi.color; }- ie we’re changing _fullData during plotting. Which is a big no no. So yeah that’s where the noop is being broken, we should avoid that, which I bet in this case means creating a new mock trace object to pass into Drawing.pointStyle(s, trace, gd, pt); rather than modifying this one. But of course since this has been around for a year and a half, this is not a release blocker.
- Also I’ll note, the code in question is in styleOne, meaning that it’ll be called once for every segment of the sunburst… so if you do go with a mock trace object, put the object creation up in style (which only happens once per trace) instead of in styleOne, and styleOne can keep reusing that same object.
If it helps, you’re free to attach new things to the trace object during plotting as long as they start with _. - I’m thinking about things like here where we mock an axis in order to reuse logic from regular axis handling in 3D axes… or here where we mock the entire figure in the course of making a new shrunken version of the figure for rangesliders
- Update after looking into it a bit: The code referenced above is now is
fill_one.js. Added in this commit
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez dans fill_one.js et suivez le chemin style/styleOne jusqu’à Drawing.pointStyle(s, trace, gd, pt). Vérifiez comment les mocks SVG et fullData sont gérés lors des redraws, en particulier pour les types de graphiques concernés. C’est terminé lorsqu’un redraw d’un graphique inchangé laisse les données sous-jacentes intactes et se comporte comme un noop.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript
- Domaine
- data-visualization
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100