Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Following this reddit thread, I wanted to see if splitProps could be improved further:
Set
is only faster when there are >100 elements. In practice, most components do not have so many keys.How did you test this change?
FILTER=splitProps-store pnpx vitest bench --run
BENCH SummarysplitProps - packages/solid/test/component.bench.ts > splitProps-store(5, 1)
1.26x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(2, 15)
2.64x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(2, 100)
14.59x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(0, 15)
2.71x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(25, 5)
1.50x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(25, 100)
15.96x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(50, 100)
14.48x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(100, 25)
4.46x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(5, 1, 2)
1.20x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(2, 3, 2)
1.21x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-store(2, 100, 3, 2)
2.43x faster than oldSplitProps
FILTER=splitProps-mixed pnpx vitest bench --run
BENCH SummarysplitProps - packages/solid/test/component.bench.ts > splitProps-mixed(5, 1)
1.01x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-mixed(2, 15)
1.04x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-mixed(2, 100)
1.07x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-mixed(0, 15)
1.15x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-mixed(25, 5)
1.03x faster than oldSplitProps
oldSplitProps - packages/solid/test/component.bench.ts > splitProps-mixed(25, 100)
1.02x faster than splitProps
oldSplitProps - packages/solid/test/component.bench.ts > splitProps-mixed(50, 100)
1.06x faster than splitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-mixed(100, 25)
1.04x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-mixed(5, 1, 2)
1.25x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-mixed(2, 3, 2)
1.74x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-mixed(2, 100, 3, 2)
2.40x faster than oldSplitProps
FILTER=splitProps-static pnpx vitest bench --run
BENCH SummarysplitProps - packages/solid/test/component.bench.ts > splitProps-static(5, 1)
1.08x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(2, 15)
1.20x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(2, 100)
1.21x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(0, 15)
1.23x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(25, 5)
1.03x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(25, 100)
1.14x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(50, 100)
1.10x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(100, 25)
1.25x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(5, 1, 2)
1.15x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(2, 3, 2)
1.39x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-static(2, 100, 3, 2)
1.45x faster than oldSplitProps
FILTER=splitProps-signal pnpx vitest bench --run
BENCH Summary
oldSplitProps - packages/solid/test/component.bench.ts > splitProps-signal(5, 1)
1.01x faster than splitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-signal(2, 15)
1.03x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-signal(2, 100)
1.01x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-signal(0, 15)
1.18x faster than oldSplitProps
oldSplitProps - packages/solid/test/component.bench.ts > splitProps-signal(25, 5)
1.01x faster than splitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-signal(25, 100)
1.01x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-signal(50, 100)
1.11x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-signal(100, 25)
1.00x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-signal(5, 1, 2)
1.20x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-signal(2, 3, 2)
1.85x faster than oldSplitProps
splitProps - packages/solid/test/component.bench.ts > splitProps-signal(2, 100, 3, 2)
2.65x faster than oldSplitProps
And some browser tests on macOS with a modified bench forked from the reddit post. Times are in milliseconds:
Original splitProps
Optimized splitProps