Skip to content

Commit fc3c460

Browse files
author
Arjun
authored
perf: optimise measurements calculation (#17)
* optimise measurements calculation * remove additinal const declaration
1 parent f3f38f3 commit fc3c460

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/index.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,23 @@ export function useVirtual({
4747
mountedRef.current = true
4848
}, [estimateSize, size])
4949

50-
const measurements = React.useMemo(() => {
50+
const { measurements, reversedMeasurements } = React.useMemo(() => {
5151
const measurements = []
52-
for (let i = 0; i < size; i++) {
52+
const reversedMeasurements = []
53+
54+
for (let i = 0, j = size - 1; i < size; i++, j--) {
5355
const start = measurements[i - 1]?.end || 0
5456
const size = measuredCache[i] || estimateSize(i)
5557
const end = start + size
58+
const bounds = { index: i, start, size, end }
5659
measurements[i] = {
57-
index: i,
58-
start,
59-
size,
60-
end,
60+
...bounds,
61+
}
62+
reversedMeasurements[j] = {
63+
...bounds,
6164
}
6265
}
63-
64-
return measurements
66+
return { measurements, reversedMeasurements }
6567
}, [estimateSize, measuredCache, size])
6668

6769
const totalSize = measurements[size - 1]?.end || 0
@@ -72,9 +74,9 @@ export function useVirtual({
7274
)
7375
let end = React.useMemo(
7476
() =>
75-
[...measurements]
76-
.reverse()
77-
.find(rowStat => rowStat.start <= scrollOffsetPlusOuterSize),
77+
reversedMeasurements.find(
78+
rowStat => rowStat.start <= scrollOffsetPlusOuterSize
79+
),
7880
[measurements, scrollOffsetPlusOuterSize]
7981
)
8082

0 commit comments

Comments
 (0)