• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

humanspeak / svelte-virtual-list / 29352024360
72%
main: 72%

Build:
Build:
LAST BUILD BRANCH: feat/165-center-align-scroll-to-offset
DEFAULT BRANCH: main
Ran 14 Jul 2026 05:02PM UTC
Jobs 1
Files 17
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

14 Jul 2026 05:01PM UTC coverage: 72.204% (+1.3%) from 70.87%
29352024360

push

github

web-flow
perf(virtual-list): block-accelerated offset/range math for deep scroll positions (#423)

* perf(virtual-list): wire block prefix sums into offset and range math

The repo already contained a complete, unit-tested block prefix-sum
system (buildBlockSums / getBlockSums) that no production code path
ever called: every positional computation still walked item heights
linearly from index 0, making scrolling near the end of a 100k-item
list pay ~O(n) per frame while the top paid almost nothing.

- calculateVisibleRange: binary-search the block sums for the start
  index, then finish with a <= blockSize walk (new optional blockSums/
  blockSize options)
- calculateTransformY / calculateScrollTarget: thread optional
  blockSums through to getScrollOffsetForIndex's existing fast path
- getScrollOffsetForIndex: clamp the block lookup to the stored sums —
  idx at/past the final block start (e.g. idx == totalItems on a
  block-aligned total) read undefined and collapsed the offset to 0
- ReactiveListManager.recomputeDerivedHeights: invalidate cached block
  sums when the published average snaps past the hysteresis band (the
  sums bake the average into every unmeasured item)
- SvelteVirtualList: pass heightManager.getBlockSums() at all five
  positional call sites (visibleItems, transformY, anchor capture/
  restore, scroll), and gate updateDebugTailDistance behind
  INTERNAL_DEBUG so debug-off scroll frames stop paying querySelector
  + getBoundingClientRect

Read-budget specs (virtualList.perf-budget.test.ts) pin the new cost:
each computation near item 90k of 100k must stay under 5,000 cache
reads (previously ~90k-180k). Equivalence specs prove the accelerated
paths return byte-identical results to the legacy walks on randomized
sparse caches.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* test(virtual-list): add tail-scroll-cost fixture and e2e regression tripwire

The fixture at /tests/other/tail-scroll-cost renders a 200,000-item
list, times 1... (continued)

364 of 568 branches covered (64.08%)

Branch coverage included in aggregate %.

21 of 22 new or added lines in 4 files covered. (95.45%)

727 of 943 relevant lines covered (77.09%)

2207.97 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
40.43
-0.19% src/lib/SvelteVirtualList.svelte
Jobs
ID Job ID Ran Files Coverage
1 node-22 - 29352024360.1 14 Jul 2026 05:02PM UTC 17
72.2
GitHub Action Run
Source Files on build 29352024360
  • Tree
  • List 17
  • Changed 4
  • Source Changed 4
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #29352024360
  • 9f71a183 on github
  • Prev Build on main (#29175812523)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc