Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 452bc9b

Browse filesBrowse 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
Copy full SHA for 452bc9b

File tree

Expand file treeCollapse file tree

3 files changed

+213
-0
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+213
-0
lines changed
Open diff view settings
Collapse file

‎benchmark/webstorage/getItem.js‎

Copy file name to clipboard
+75Lines 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+
}
Collapse file

‎benchmark/webstorage/removeItem.js‎

Copy file name to clipboard
+75Lines 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+
}
Collapse file

‎benchmark/webstorage/setItem.js‎

Copy file name to clipboard
+63Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.