Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Rolling transforms rebuild and publish every presented point on every frame, even with no pointer or focus

オープン
#201 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
typescript

調査の方向性

Start with the rolling transform presentation track in packages/charts-core/src/motion.ts and the handlePresentationPoints path in packages/charts-core/src/renderer.ts. Reproduce by streaming data into a rolling line chart with no pointer or focus, then profile a roll to confirm the per-frame work. Compare the two proposed approaches and check that presented points are available when interaction begins while idle frames avoid unnecessary rebuilds, publishes, and filtering.

索引モデルが issue の本文から書いたものです。

説明

A rolling-window chart pays a per-frame cost proportional to its row count for points nothing reads.

  • Each rolling transform plan gets a presentation track whose apply re-creates every point of the element, plus the exiting ones, as { ...point, x, y } keyed by pointIdentity(point) (motion.ts:3442-3453).
  • Every tick then calls lifecycle.publish (motion.ts:3999), which copies the whole map into a new array (motion.ts:3598).
  • The renderer's handlePresentationPoints filters that array with viewportInteractionPoints before it checks for a pointer or a focused point, so with neither the result is discarded (renderer.ts:1223-1246).

Use case: a live line that streams back to back 600 ms rolls of about 220 smoothed rows per mark (area, line and tail). With per-track timers, the points track is 77% of each frame's sampling (0.13 ms per call). In a production build the motion tick is about 0.23 ms per frame, about 131 ms of requestAnimationFrame time per 6 s of streaming, with no pointer over the chart. The DOM writes the roll needs are a small part of that.

Repro

Mount any line chart with a rolling window and keep appending data with no pointer and no focus. Profile one roll: apply runs on every frame for every row, and handlePresentationPoints runs viewportInteractionPoints every frame and then returns.

Proposal

Either:

  1. derive presented points lazily from the plan's transform when a subscriber or getPresentationPoints actually needs them; or
  2. skip the per-frame rebuild, publish and filter while there is no pointer, focus or tooltip, and publish once when one appears.

Related: #195 (rolling windows). Checked against 57774e14a1a86081eddb3a23523724a40da05640 (v1.1.0).

主要言語
TypeScript
スター
819
フォーク
49
平均マージ
12時間 9分
マージ済み PR(30日)
6

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

TanStack/charts のほかの issue

TanStack/charts の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。