Fixed-header tables force one getBoundingClientRect per column on every mount (ResizeObserver-driven MeasureCell)
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 42/100
- Type d'issue
- Bug
- Clarté
- À clarifier
- Activité
- Calme
- Stack technique
- react, typescript
- Domaine
- frontend, performance
Piste de recherche
Commencez par Body/MeasureCell.js et useResizeObserver.js:20, puis reproduisez un tableau à en-tête fixe avec scroll.y et profilez son cold mount comme indiqué. Le travail est terminé lorsqu’il est déterminé si les lectures par colonne sont intentionnelles et qu’un chemin de mesure moins coûteux est identifié ou implémenté sans modifier le comportement observé du tableau.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Environment
@rc-component/table: 1.10.4 (viaantd6.5.3)@rc-component/resize-observer: 1.1.2- Chrome, production build, 4x CPU throttle (DevTools)
What we observed
Any table mounted with a fixed/scrollable header (scroll.y set, i.e. fixHeader true) renders a hidden "measure row" with one MeasureCell per column. Each MeasureCell wraps its cell in a ResizeObserver (Body/MeasureCell.js), and on the initial observe, onInternalResize (useResizeObserver.js:20) calls target.getBoundingClientRect() once per cell.
On a ~40-column table, we measured 86 getBoundingClientRect calls totaling ~547ms of forced-layout self-time on a single cold mount, instrumented by wrapping HTMLElement.prototype.getBoundingClientRect/offsetWidth and measuring with performance.now(). This is currently the dominant forced-layout cost on table mount in our app (a general-purpose ERP list view), well above what column count alone would suggest — the reads don't appear to be batched into a single reflow.
Question / ask
Is per-column ResizeObserver-driven measurement (as opposed to reading all column offsetWidths in one synchronous batch, which the browser can usually satisfy with a single layout pass) intentional, or is there a lower-cost path we're missing (e.g. skipping remeasurement when explicit pixel widths are already provided for every column)? Happy to share a minimal repro or profiling trace if useful.
- Langage dominant
- TypeScript
- Étoiles
- 1.4k
- Forks
- 619
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
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.
Autres issues de react-component/table
-
rowExpandable does not work when dataSource has children fieldPeut-être pris @nrps9909 l’a pris il y a 47 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 50/100
react-component/table#1416 ·
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 30/100
react-component/table#1403 ·
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 15/100
react-component/table#1269 · 1 commentaire ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
react-component/table#1257 · 1 réaction ·
-
Table cells are announced as "clickable" by screen readerPeut-être pris @nrps9909 l’a pris il y a 47 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 45/100
react-component/table#1228 ·
Toutes les issues de react-component/table
Issues similaires
-
affected/v17 affected/v18 area/frontend type/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
umbraco/Umbraco-CMS#24186 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
better-auth/better-auth#11723 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
area: docs difficulty: easy documentation good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
Worker-Erstellung bricht langsame Git-Worktree-Checkouts nach 20 Sekunden abPeut-être pris @KajoVanBuyten l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 69/100
AgentSystemLabs/agent-office#367 ·
Les mainteneurs répondent en général sous 1 jour