Skip to content

Commit 452bc9b

Browse files
jakecastellitargos
authored andcommitted
benchmark: add webstorage benchmark
PR-URL: #55040 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Vinícius Lourenço Claro Cardoso <contact@viniciusl.com.br> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
1 parent 3a1485a commit 452bc9b

File tree

3 files changed

+213
-0
lines changed

3 files changed

+213
-0
lines changed

benchmark/webstorage/getItem.js

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
'use strict';
2+
const { join } = require('node:path');
3+
const common = require('../common.js');
4+
const tmpdir = require('../../test/common/tmpdir');
5+
6+
let cnt = 0;
7+
8+
tmpdir.refresh();
9+
10+
function nextLocalStorage() {
11+
return join(tmpdir.path, `${++cnt}.localstorage`);
12+
}
13+
14+
const options = {
15+
flags: ['--experimental-webstorage', `--localstorage-file=${nextLocalStorage()}`],
16+
};
17+
18+
const bench = common.createBenchmark(main, {
19+
type: ['localStorage-getItem',
20+
'localStorage-getter',
21+
'sessionStorage-getItem',
22+
'sessionStorage-getter'],
23+
// Note: web storage has only 10mb quota
24+
n: [1e5],
25+
}, options);
26+
27+
function fillStorage(storage, n) {
28+
for (let i = 0; i < n; i++) {
29+
storage.setItem(i, i);
30+
}
31+
}
32+
33+
function main({ n, type }) {
34+
const localStorage = globalThis.localStorage;
35+
const sessionStorage = globalThis.sessionStorage;
36+
37+
switch (type) {
38+
case 'localStorage-getItem':
39+
fillStorage(localStorage, n);
40+
bench.start();
41+
for (let i = 0; i < n; i++) {
42+
localStorage.getItem(i);
43+
}
44+
bench.end(n);
45+
break;
46+
case 'localStorage-getter':
47+
fillStorage(localStorage, n);
48+
bench.start();
49+
for (let i = 0; i < n; i++) {
50+
// eslint-disable-next-line no-unused-expressions
51+
localStorage[i];
52+
}
53+
bench.end(n);
54+
break;
55+
case 'sessionStorage-getItem':
56+
fillStorage(sessionStorage, n);
57+
bench.start();
58+
for (let i = 0; i < n; i++) {
59+
sessionStorage.getItem(i);
60+
}
61+
bench.end(n);
62+
break;
63+
case 'sessionStorage-getter':
64+
fillStorage(sessionStorage, n);
65+
bench.start();
66+
for (let i = 0; i < n; i++) {
67+
// eslint-disable-next-line no-unused-expressions
68+
sessionStorage[i];
69+
}
70+
bench.end(n);
71+
break;
72+
default:
73+
new Error('Invalid type');
74+
}
75+
}

benchmark/webstorage/removeItem.js

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
'use strict';
2+
const { join } = require('node:path');
3+
const common = require('../common.js');
4+
const tmpdir = require('../../test/common/tmpdir');
5+
6+
let cnt = 0;
7+
8+
tmpdir.refresh();
9+
10+
function nextLocalStorage() {
11+
return join(tmpdir.path, `${++cnt}.localstorage`);
12+
}
13+
14+
const options = {
15+
flags: ['--experimental-webstorage', `--localstorage-file=${nextLocalStorage()}`],
16+
};
17+
18+
const bench = common.createBenchmark(main, {
19+
type: ['localStorage-removeItem',
20+
'localStorage-delete',
21+
'sessionStorage-removeItem',
22+
'sessionStorage-delete',
23+
],
24+
// Note: web storage has only 10mb quota
25+
n: [1e5],
26+
}, options);
27+
28+
function fillStorage(storage, n) {
29+
for (let i = 0; i < n; i++) {
30+
storage.setItem(i, i);
31+
}
32+
}
33+
34+
function main({ n, type }) {
35+
const localStorage = globalThis.localStorage;
36+
const sessionStorage = globalThis.sessionStorage;
37+
38+
switch (type) {
39+
case 'localStorage-removeItem':
40+
fillStorage(localStorage, n);
41+
bench.start();
42+
for (let i = 0; i < n; i++) {
43+
localStorage.removeItem(i);
44+
}
45+
bench.end(n);
46+
break;
47+
case 'localStorage-delete':
48+
fillStorage(localStorage, n);
49+
bench.start();
50+
for (let i = 0; i < n; i++) {
51+
delete localStorage[i];
52+
}
53+
bench.end(n);
54+
break;
55+
case 'sessionStorage-removeItem':
56+
fillStorage(sessionStorage, n);
57+
bench.start();
58+
for (let i = 0; i < n; i++) {
59+
sessionStorage.removeItem(i);
60+
}
61+
bench.end(n);
62+
break;
63+
64+
case 'sessionStorage-delete':
65+
fillStorage(localStorage, n);
66+
bench.start();
67+
for (let i = 0; i < n; i++) {
68+
delete sessionStorage[i];
69+
}
70+
bench.end(n);
71+
break;
72+
default:
73+
new Error('Invalid type');
74+
}
75+
}

benchmark/webstorage/setItem.js

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
'use strict';
2+
const { join } = require('node:path');
3+
const common = require('../common.js');
4+
const tmpdir = require('../../test/common/tmpdir');
5+
6+
let cnt = 0;
7+
8+
tmpdir.refresh();
9+
10+
function nextLocalStorage() {
11+
return join(tmpdir.path, `${++cnt}.localstorage`);
12+
}
13+
14+
const options = {
15+
flags: ['--experimental-webstorage', `--localstorage-file=${nextLocalStorage()}`],
16+
};
17+
18+
const bench = common.createBenchmark(main, {
19+
type: ['localStorage-setItem',
20+
'localStorage-setter',
21+
'sessionStorage-setItem',
22+
'sessionStorage-setter'],
23+
// Note: web storage has only 10mb quota
24+
n: [1e5],
25+
}, options);
26+
27+
function main({ n, type }) {
28+
const localStorage = globalThis.localStorage;
29+
const sessionStorage = globalThis.sessionStorage;
30+
31+
switch (type) {
32+
case 'localStorage-setItem':
33+
bench.start();
34+
for (let i = 0; i < n; i++) {
35+
localStorage.setItem(i, i);
36+
}
37+
bench.end(n);
38+
break;
39+
case 'localStorage-setter':
40+
bench.start();
41+
for (let i = 0; i < n; i++) {
42+
localStorage[i] = i;
43+
}
44+
bench.end(n);
45+
break;
46+
case 'sessionStorage-setItem':
47+
bench.start();
48+
for (let i = 0; i < n; i++) {
49+
sessionStorage.setItem(i, i);
50+
}
51+
bench.end(n);
52+
break;
53+
case 'sessionStorage-setter':
54+
bench.start();
55+
for (let i = 0; i < n; i++) {
56+
sessionStorage[i] = i;
57+
}
58+
bench.end(n);
59+
break;
60+
default:
61+
new Error('Invalid type');
62+
}
63+
}

0 commit comments

Comments
 (0)