Skip to content

Commit 5b0dea4

Browse files
committed
Merge branch 'master' of github.com:krausest/js-framework-benchmark
2 parents 6dabf9d + b109fce commit 5b0dea4

File tree

12 files changed

+4994
-2
lines changed

12 files changed

+4994
-2
lines changed

frameworks/keyed/doohtml/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "js-framework-benchmark-doohtml",
3-
"version": "0.80.1",
3+
"version": "0.60.11",
44
"description": "DooHTML JS-Benchmark",
55
"main": "Main.class.js",
66
"js-framework-benchmark": {

frameworks/keyed/udomsay/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8"/>
5+
<title>udomsay-keyed</title>
6+
<link href="/css/currentStyle.css" rel="stylesheet"/>
7+
</head>
8+
<body>
9+
<div id='main'></div>
10+
<script src='dist/main.js'></script>
11+
</body>
12+
</html>

frameworks/keyed/udomsay/package-lock.json

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

frameworks/keyed/udomsay/package.json

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"name": "js-framework-benchmark-udomsay",
3+
"version": "1.0.0",
4+
"main": "dist/main.js",
5+
"type": "module",
6+
"js-framework-benchmark": {
7+
"frameworkVersionFromPackage": "udomsay",
8+
"issues": [
9+
772
10+
]
11+
},
12+
"scripts": {
13+
"build-dev": "rollup -c -w",
14+
"build-prod": "rollup -c --environment production && uglifyjs dist/main.js -c -m -o dist/main.js"
15+
},
16+
"author": "Andrea Giammarchi",
17+
"license": "ISC",
18+
"homepage": "https://github.com/krausest/js-framework-benchmark",
19+
"repository": {
20+
"type": "git",
21+
"url": "https://github.com/krausest/js-framework-benchmark.git"
22+
},
23+
"dependencies": {
24+
"udomsay": "0.1.7"
25+
},
26+
"devDependencies": {
27+
"@babel/cli": "^7.19.3",
28+
"@babel/core": "^7.19.6",
29+
"@rollup/plugin-babel": "^6.0.2",
30+
"@rollup/plugin-node-resolve": "^15.0.1",
31+
"@ungap/babel-plugin-transform-hinted-jsx": "^0.1.0",
32+
"rollup": "^3.2.3",
33+
"uglify-js": "^3.17.4"
34+
}
35+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import {nodeResolve} from '@rollup/plugin-node-resolve';
2+
// import {terser} from 'rollup-plugin-terser';
3+
import babel from "@rollup/plugin-babel";
4+
5+
export default {
6+
input: './src/main.jsx',
7+
plugins: [
8+
babel({
9+
babelHelpers: "bundled",
10+
exclude: "node_modules/**",
11+
"targets": {
12+
"esmodules": true
13+
},
14+
plugins: [
15+
["@ungap/babel-plugin-transform-hinted-jsx"]
16+
]
17+
}),
18+
nodeResolve({extensions: [".js", ".jsx"]}),
19+
// yay, terser breaks my code!
20+
// terser({mangle: false, output: {comments: false}})
21+
],
22+
output: {
23+
file: './dist/main.js',
24+
format: 'iife'
25+
}
26+
};

frameworks/keyed/udomsay/src/main.jsx

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
/** @jsx C *//** @jsxFrag F *//** @jsxInterpolation I */
2+
3+
// Fully readpted from Solid-js benchmarkk
4+
5+
import {
6+
render,
7+
signal,
8+
effect,
9+
batch,
10+
createElement as C,
11+
Fragment as F,
12+
interpolation as I
13+
} from 'udomsay';
14+
15+
let idCounter = 1;
16+
const adjectives = ["pretty", "large", "big", "small", "tall", "short", "long", "handsome", "plain", "quaint", "clean", "elegant", "easy", "angry", "crazy", "helpful", "mushy", "odd", "unsightly", "adorable", "important", "inexpensive", "cheap", "expensive", "fancy"],
17+
colours = ["red", "yellow", "blue", "green", "pink", "brown", "purple", "brown", "white", "black", "orange"],
18+
nouns = ["table", "chair", "house", "bbq", "desk", "car", "pony", "cookie", "sandwich", "burger", "pizza", "mouse", "keyboard"];
19+
20+
function _random (max) { return Math.round(Math.random() * 1000) % max; };
21+
22+
function buildData(count) {
23+
let data = new Array(count);
24+
for (let i = 0; i < count; i++) {
25+
data[i] = {
26+
id: idCounter++,
27+
label: signal(`${adjectives[_random(adjectives.length)]} ${colours[_random(colours.length)]} ${nouns[_random(nouns.length)]}`)
28+
}
29+
}
30+
return data;
31+
}
32+
33+
const Button = ({ id, text, fn }) => (
34+
<div class='col-sm-6 smallpad'>
35+
<button id={ id } class='btn btn-primary btn-block' type='button' onClick={ fn }>{ text }</button>
36+
</div>
37+
);
38+
39+
const
40+
data = signal([]),
41+
selected = signal(null),
42+
run = () => { data.value = buildData(1000) },
43+
runLots = () => { data.value = buildData(10000) },
44+
add = () => { data.value = data.value.concat(buildData(1000)) },
45+
update = () => batch(() => {
46+
for(let i = 0, d = data.value, len = d.length; i < len; i += 10)
47+
d[i].label.value += ' !!!';
48+
}),
49+
swapRows = () => {
50+
const d = data.value.slice();
51+
if (d.length > 998) {
52+
let tmp = d[1];
53+
d[1] = d[998];
54+
d[998] = tmp;
55+
data.value = d;
56+
}
57+
},
58+
clear = () => {
59+
selected.value = null;
60+
data.value = [];
61+
},
62+
remove = idx => {
63+
const {value: d} = data;
64+
data.value = [...d.slice(0, idx), ...d.slice(idx + 1)];
65+
}
66+
;
67+
68+
// handle danger case off the whole App
69+
// as it makes no sense to loop over and over
70+
// the same data to just switch a single class
71+
// that cannot exist in more than two rows
72+
effect(row => {
73+
const {value} = selected;
74+
if (value !== row) {
75+
if (row)
76+
row.classList.remove('danger');
77+
if (value)
78+
value.classList.add('danger');
79+
}
80+
return value;
81+
});
82+
83+
const App = () => (
84+
<div class='container'>
85+
<div class='jumbotron'><div class='row'>
86+
<div class='col-md-6'><h1>udomsay Keyed</h1></div>
87+
<div class='col-md-6'><div class='row'>
88+
<Button id='run' text='Create 1,000 rows' fn={ run } />
89+
<Button id='runlots' text='Create 10,000 rows' fn={ runLots } />
90+
<Button id='add' text='Append 1,000 rows' fn={ add } />
91+
<Button id='update' text='Update every 10th row' fn={ update } />
92+
<Button id='clear' text='Clear' fn={ clear } />
93+
<Button id='swaprows' text='Swap Rows' fn={ swapRows } />
94+
</div></div>
95+
</div></div>
96+
<table class='table table-hover table-striped test-data'><tbody>
97+
{data.value.map(({id: rowId, label}, idx) => (
98+
<tr key={rowId}>
99+
<td class='col-md-1' textContent={rowId} />
100+
<td class='col-md-4'><a onClick={({currentTarget: t}) => { selected.value = t.closest('tr') }} textContent={ label.value } /></td>
101+
<td class='col-md-1'><a onClick={() => { remove(idx) }}><span class='glyphicon glyphicon-remove' aria-hidden='true' /></a></td>
102+
<td class='col-md-6'/>
103+
</tr>
104+
))}
105+
</tbody></table>
106+
<span class='preloadicon glyphicon glyphicon-remove' aria-hidden='true' />
107+
</div>
108+
);
109+
110+
render(<App />, document.getElementById("main"));

frameworks/non-keyed/doohtml/js/doo.html.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8"/>
5+
<title>udomsay-non-keyed</title>
6+
<link href="/css/currentStyle.css" rel="stylesheet"/>
7+
</head>
8+
<body>
9+
<div id='main'></div>
10+
<script src='dist/main.js'></script>
11+
</body>
12+
</html>

0 commit comments

Comments
 (0)