Skip to content

Commit d6e0730

Browse files
committed
Bump - more performance improvements
1 parent 8579632 commit d6e0730

File tree

3 files changed

+27
-21
lines changed

3 files changed

+27
-21
lines changed

frameworks/keyed/michijs/package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frameworks/keyed/michijs/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "js-framework-benchmark-michijs",
3-
"version": "2.0.4",
3+
"version": "2.0.5",
44
"description": "michijs",
55
"main": "index.js",
66
"js-framework-benchmark": {
@@ -34,6 +34,6 @@
3434
"typescript": "5.6.3"
3535
},
3636
"dependencies": {
37-
"@michijs/michijs": "2.0.4"
37+
"@michijs/michijs": "2.0.5"
3838
}
3939
}

frameworks/keyed/michijs/src/index.tsx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
type ObservableType,
33
createCustomElement,
44
useObserve,
5+
ProxiedArray,
56
} from "@michijs/michijs";
67

78
function _random(max: number) {
@@ -67,40 +68,45 @@ const adjectivesLength = adjectives.length;
6768
const coloursLength = colours.length;
6869
const nounsLength = nouns.length;
6970

70-
interface Row { label: string; id: number; selected: string | undefined };
71+
interface Row {
72+
label: ObservableType<string>;
73+
id: number;
74+
selected: ObservableType<string | undefined>;
75+
}
7176
let nextId = 1;
72-
let selectedItem: ObservableType<Row> | null = null;
77+
let selectedItem: Row | null = null;
7378
function buildData(count = 1000) {
7479
const data = new Array<Row>(count);
7580
for (let i = 0; i < count; i++)
7681
data[i] = {
77-
selected: undefined,
82+
selected: useObserve<string | undefined>(undefined),
7883
id: nextId++,
79-
label: `${adjectives[_random(adjectivesLength)]} ${
80-
colours[_random(coloursLength)]
81-
} ${nouns[_random(nounsLength)]}`,
84+
label: useObserve(
85+
`${adjectives[_random(adjectivesLength)]} ${colours[_random(coloursLength)]} ${nouns[_random(nounsLength)]}`,
86+
),
8287
};
8388
return data;
8489
}
85-
const rows = useObserve<Row[]>([]);
90+
const rows = new ProxiedArray<Row>([], undefined, true);
8691
const run = () => rows.$replace(...buildData());
8792
const runLots = () => rows.$replace(...buildData(10000));
8893
const add = () => rows.push(...buildData());
8994
const update = () => {
90-
for (let i = 0; i < rows.length; i += 10) {
91-
// Will be solved on https://github.com/microsoft/TypeScript/issues/43826
92-
const label = rows[i].label;
95+
const array = rows.$value;
96+
const length = array.length;
97+
for (let i = 0; i < length; i += 10) {
98+
const label = array[i].label;
9399
label(`${label()} !!!`);
94100
}
95101
};
96102
const clear = () => rows.$clear();
97-
const select = (row: ObservableType<Row>) => {
103+
const select = (row: Row) => {
98104
row.selected("danger");
99105
if (selectedItem) selectedItem.selected(undefined);
100106
selectedItem = row;
101107
};
102-
const deleteItem = (id: ObservableType<number>) =>
103-
rows.$remove(rows.findIndex((x) => x.id === id));
108+
const deleteItem = (id: number) =>
109+
rows.$remove(rows.$value.findIndex((x) => x.id === id));
104110
const swapRows = () => rows.$swap(1, 998);
105111

106112
export const Table = createCustomElement("michi-table", {

0 commit comments

Comments
 (0)