mirror of https://github.com/sveltejs/svelte
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
1.7 KiB
98 lines
1.7 KiB
2 months ago
|
import { assert, fastest_test } from '../../../utils.js';
|
||
|
import * as $ from 'svelte/internal/client';
|
||
7 months ago
|
|
||
|
function setup() {
|
||
5 months ago
|
let head = $.state(0);
|
||
7 months ago
|
let last = head;
|
||
|
let counter = 0;
|
||
|
|
||
|
const destroy = $.effect_root(() => {
|
||
|
for (let i = 0; i < 50; i++) {
|
||
|
let current = $.derived(() => {
|
||
|
return $.get(head) + i;
|
||
|
});
|
||
|
let current2 = $.derived(() => {
|
||
|
return $.get(current) + 1;
|
||
|
});
|
||
|
$.render_effect(() => {
|
||
|
$.get(current2);
|
||
|
counter++;
|
||
|
});
|
||
|
last = current2;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
destroy,
|
||
|
run() {
|
||
|
$.flush_sync(() => {
|
||
|
$.set(head, 1);
|
||
|
});
|
||
7 months ago
|
counter = 0;
|
||
7 months ago
|
for (let i = 0; i < 50; i++) {
|
||
|
$.flush_sync(() => {
|
||
|
$.set(head, i);
|
||
|
});
|
||
|
assert($.get(last) === i + 50);
|
||
|
}
|
||
|
assert(counter === 50 * 50);
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
7 months ago
|
export async function kairo_broad_unowned() {
|
||
7 months ago
|
// Do 10 loops to warm up JIT
|
||
|
for (let i = 0; i < 10; i++) {
|
||
|
const { run, destroy } = setup();
|
||
|
run();
|
||
|
destroy();
|
||
|
}
|
||
|
|
||
|
const { run, destroy } = setup();
|
||
|
|
||
|
const { timing } = await fastest_test(10, () => {
|
||
|
for (let i = 0; i < 100; i++) {
|
||
|
run();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
destroy();
|
||
|
|
||
|
return {
|
||
7 months ago
|
benchmark: 'kairo_broad_unowned',
|
||
|
time: timing.time.toFixed(2),
|
||
|
gc_time: timing.gc_time.toFixed(2)
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export async function kairo_broad_owned() {
|
||
|
let run, destroy;
|
||
|
|
||
|
const destroy_owned = $.effect_root(() => {
|
||
|
// Do 10 loops to warm up JIT
|
||
|
for (let i = 0; i < 10; i++) {
|
||
|
const { run, destroy } = setup();
|
||
|
run();
|
||
|
destroy();
|
||
|
}
|
||
|
|
||
|
({ run, destroy } = setup());
|
||
|
});
|
||
|
|
||
|
const { timing } = await fastest_test(10, () => {
|
||
|
for (let i = 0; i < 100; i++) {
|
||
|
run();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// @ts-ignore
|
||
|
destroy();
|
||
|
destroy_owned();
|
||
|
|
||
|
return {
|
||
|
benchmark: 'kairo_broad_owned',
|
||
7 months ago
|
time: timing.time.toFixed(2),
|
||
|
gc_time: timing.gc_time.toFixed(2)
|
||
|
};
|
||
|
}
|