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

Lines changed: 75 additions & 0 deletions
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

Lines changed: 75 additions & 0 deletions
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

Lines changed: 63 additions & 0 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy