preact
preact copied to clipboard
Testing out renderer state + alternatives
I'll be opening a few PRs for variants of this to get numbers from the perf bot. This one is an experiment to check the cost/benefit of arguments vs rendererState.
I'd originally intended to simply replace properties with accessor functions (rendererState.context = x becomes setCurrentContext(x)) in 8ea55ce, however Terser's inlining has degraded considerably since we last relied on this technique. In particular, it fails to inline any function that is used twice from within the same caller:
function patch() {
let ctx = getCurrentContext(); // gets inlined
if (child) {
setCurrentContext(childCtx); // can be forced inline via @__INLINE__, but that's not great
patch(child);
setCurrentContext(ctx); // will never be inlined. forcing via @__INLINE__ inlines as an IIFE 😶🌫️
}
}
So, I decided to try checking whether context or parentDom (the main two properties on RendererState) were driving performance. When I started looking into this though, I realized that context hasn't been an argument for quite some time - it's a backwards walk up the tree. I'd like to do another experimental PR to check if this is a performance tradeoff or not.
📊 Tachometer Benchmark Results
Summary
duration
- 02_replace1k: unsure 🔍 -1% - +3% (-0.96ms - +4.32ms)
preact-local vs preact-master - 03_update10th1k_x16: unsure 🔍 -2% - +2% (-1.09ms - +0.89ms)
preact-local vs preact-master - 07_create10k: unsure 🔍 -1% - +0% (-8.85ms - +4.54ms)
preact-local vs preact-master - filter_list: unsure 🔍 -4% - +3% (-51.69ms - +37.13ms)
preact-local vs preact-master - hydrate1k: unsure 🔍 -6% - +12% (-5.76ms - +12.41ms)
preact-local vs preact-master - many_updates: unsure 🔍 -4% - +5% (-36.69ms - +43.94ms)
preact-local vs preact-master - text_update: unsure 🔍 -4% - +10% (-15.24ms - +37.51ms)
preact-local vs preact-master - todo: faster ✔ 0% - 2% (0.16ms - 1.06ms)
preact-local vs preact-master
usedJSHeapSize
- 02_replace1k: unsure 🔍 -0% - +0% (-0.01ms - +0.01ms)
preact-local vs preact-master - 03_update10th1k_x16: unsure 🔍 -0% - +0% (-0.00ms - +0.01ms)
preact-local vs preact-master - 07_create10k: unsure 🔍 -3% - +2% (-0.04ms - +0.03ms)
preact-local vs preact-master - filter_list: unsure 🔍 -1% - +0% (-0.01ms - +0.01ms)
preact-local vs preact-master - hydrate1k: unsure 🔍 -0% - -0% (-0.01ms - -0.00ms)
preact-local vs preact-master - many_updates: unsure 🔍 -0% - +0% (-0.01ms - +0.01ms)
preact-local vs preact-master - text_update: unsure 🔍 -0% - -0% (-0.00ms - -0.00ms)
preact-local vs preact-master - todo: unsure 🔍 -2% - +3% (-0.02ms - +0.04ms)
preact-local vs preact-master
Results
02_replace1k
- Browser: chrome-headless 100.0.4896.75
- Sample size: 80
- Built by: Benchmarks #753
-
Commit: 79c1628
duration
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 145.15ms - 148.55ms | - | unsure 🔍 -3% - +1% -4.32ms - +0.96ms |
| preact-local | 146.51ms - 150.55ms | unsure 🔍 -1% - +3% -0.96ms - +4.32ms | - |
usedJSHeapSize
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 4.18ms - 4.19ms | - | unsure 🔍 -0% - +0% -0.01ms - +0.01ms |
| preact-local | 4.18ms - 4.19ms | unsure 🔍 -0% - +0% -0.01ms - +0.01ms | - |
run-warmup-0
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 58.81ms - 60.98ms | - | unsure 🔍 -2% - +3% -1.27ms - +1.64ms |
| preact-local | 58.75ms - 60.68ms | unsure 🔍 -3% - +2% -1.64ms - +1.27ms | - |
run-warmup-1
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 85.14ms - 90.38ms | - | unsure 🔍 -4% - +4% -3.77ms - +3.37ms |
| preact-local | 85.54ms - 90.38ms | unsure 🔍 -4% - +4% -3.37ms - +3.77ms | - |
run-warmup-2
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 70.02ms - 72.63ms | - | unsure 🔍 -3% - +2% -1.95ms - +1.75ms |
| preact-local | 70.12ms - 72.73ms | unsure 🔍 -2% - +3% -1.75ms - +1.95ms | - |
run-final
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 145.18ms - 148.57ms | - | unsure 🔍 -3% - +1% -4.33ms - +0.94ms |
| preact-local | 146.55ms - 150.58ms | unsure 🔍 -1% - +3% -0.94ms - +4.33ms | - |
03_update10th1k_x16
- Browser: chrome-headless 100.0.4896.75
- Sample size: 50
- Built by: Benchmarks #753
-
Commit: 79c1628
duration
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 49.36ms - 50.69ms | - | unsure 🔍 -2% - +2% -0.89ms - +1.09ms |
| preact-local | 49.19ms - 50.66ms | unsure 🔍 -2% - +2% -1.09ms - +0.89ms | - |
usedJSHeapSize
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 4.20ms - 4.21ms | - | unsure 🔍 -0% - +0% -0.01ms - +0.00ms |
| preact-local | 4.20ms - 4.21ms | unsure 🔍 -0% - +0% -0.00ms - +0.01ms | - |
07_create10k
- Browser: chrome-headless 100.0.4896.75
- Sample size: 50
- Built by: Benchmarks #753
-
Commit: 79c1628
duration
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 1307.26ms - 1318.82ms | - | unsure 🔍 -0% - +1% -4.54ms - +8.85ms |
| preact-local | 1307.52ms - 1314.26ms | unsure 🔍 -1% - +0% -8.85ms - +4.54ms | - |
usedJSHeapSize
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 1.39ms - 1.44ms | - | unsure 🔍 -2% - +3% -0.03ms - +0.04ms |
| preact-local | 1.39ms - 1.43ms | unsure 🔍 -3% - +2% -0.04ms - +0.03ms | - |
filter_list
- Browser: chrome-headless 100.0.4896.75
- Sample size: 70
- Built by: Benchmarks #753
-
Commit: 79c1628
duration
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 1373.81ms - 1437.14ms | - | unsure 🔍 -3% - +4% -37.13ms - +51.69ms |
| preact-local | 1367.05ms - 1429.34ms | unsure 🔍 -4% - +3% -51.69ms - +37.13ms | - |
usedJSHeapSize
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 2.04ms - 2.05ms | - | unsure 🔍 -0% - +1% -0.01ms - +0.01ms |
| preact-local | 2.03ms - 2.05ms | unsure 🔍 -1% - +0% -0.01ms - +0.01ms | - |
hydrate1k
- Browser: chrome-headless 100.0.4896.75
- Sample size: 80
- Built by: Benchmarks #753
-
Commit: 79c1628
duration
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 98.00ms - 110.15ms | - | unsure 🔍 -11% - +5% -12.41ms - +5.76ms |
| preact-local | 100.64ms - 114.15ms | unsure 🔍 -6% - +12% -5.76ms - +12.41ms | - |
usedJSHeapSize
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 6.90ms - 6.90ms | - | unsure 🔍 +0% - +0% +0.00ms - +0.01ms |
| preact-local | 6.90ms - 6.90ms | unsure 🔍 -0% - -0% -0.01ms - -0.00ms | - |
many_updates
- Browser: chrome-headless 100.0.4896.75
- Sample size: 60
- Built by: Benchmarks #753
-
Commit: 79c1628
duration
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 933.96ms - 991.35ms | - | unsure 🔍 -5% - +4% -43.94ms - +36.69ms |
| preact-local | 937.96ms - 994.60ms | unsure 🔍 -4% - +5% -36.69ms - +43.94ms | - |
usedJSHeapSize
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 5.70ms - 5.71ms | - | unsure 🔍 -0% - +0% -0.01ms - +0.01ms |
| preact-local | 5.70ms - 5.71ms | unsure 🔍 -0% - +0% -0.01ms - +0.01ms | - |
text_update
- Browser: chrome-headless 100.0.4896.75
- Sample size: 80
- Built by: Benchmarks #753
-
Commit: 79c1628
duration
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 349.63ms - 386.49ms | - | unsure 🔍 -10% - +4% -37.51ms - +15.24ms |
| preact-local | 360.33ms - 398.06ms | unsure 🔍 -4% - +10% -15.24ms - +37.51ms | - |
usedJSHeapSize
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 1.30ms - 1.30ms | - | unsure 🔍 +0% - +0% +0.00ms - +0.00ms |
| preact-local | 1.29ms - 1.30ms | unsure 🔍 -0% - -0% -0.00ms - -0.00ms | - |
todo
- Browser: chrome-headless 100.0.4896.75
- Sample size: 50
- Built by: Benchmarks #753
-
Commit: 79c1628
duration
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 44.47ms - 45.12ms | - | slower ❌ 0% - 2% 0.16ms - 1.06ms |
| preact-local | 43.88ms - 44.51ms | faster ✔ 0% - 2% 0.16ms - 1.06ms | - |
usedJSHeapSize
| Version | Avg time | vs preact-master | vs preact-local |
|---|---|---|---|
| preact-master | 1.37ms - 1.42ms | - | unsure 🔍 -3% - +2% -0.04ms - +0.02ms |
| preact-local | 1.38ms - 1.43ms | unsure 🔍 -2% - +3% -0.02ms - +0.04ms | - |
Size Change: -157 B (0%)
Total Size: 38.1 kB
| Filename | Size | Change | |
|---|---|---|---|
dist/preact.js |
4.58 kB | -60 B (1%) | |
dist/preact.min.js |
4.64 kB | -53 B (1%) | |
dist/preact.umd.js |
4.67 kB | -44 B (0%) |
ℹ️ View Unchanged
| Filename | Size | Change | |
|---|---|---|---|
compat/dist/compat.js |
3.63 kB | 0 B | |
compat/dist/compat.umd.js |
3.71 kB | 0 B | |
debug/dist/debug.js |
3.25 kB | 0 B | |
debug/dist/debug.umd.js |
3.33 kB | 0 B | |
devtools/dist/devtools.js |
232 B | 0 B | |
devtools/dist/devtools.umd.js |
316 B | 0 B | |
hooks/dist/hooks.js |
1.32 kB | 0 B | |
hooks/dist/hooks.umd.js |
1.4 kB | 0 B | |
jsx-runtime/dist/jsxRuntime.js |
342 B | 0 B | |
jsx-runtime/dist/jsxRuntime.umd.js |
425 B | 0 B | |
server/dist/server.js |
2.6 kB | 0 B | |
server/dist/server.umd.js |
2.69 kB | 0 B | |
test-utils/dist/testUtils.js |
431 B | 0 B | |
test-utils/dist/testUtils.umd.js |
516 B | 0 B |