From fba060999a94221e13ef8218e1d73655316c1de2 Mon Sep 17 00:00:00 2001 From: jakecastelli Date: Sat, 21 Sep 2024 15:11:16 +0930 Subject: [PATCH] benchmark: add webstorage benchmark --- benchmark/webstorage/getItem.js | 75 ++++++++++++++++++++++++++++++ benchmark/webstorage/removeItem.js | 55 ++++++++++++++++++++++ benchmark/webstorage/setItem.js | 63 +++++++++++++++++++++++++ 3 files changed, 193 insertions(+) create mode 100644 benchmark/webstorage/getItem.js create mode 100644 benchmark/webstorage/removeItem.js create mode 100644 benchmark/webstorage/setItem.js diff --git a/benchmark/webstorage/getItem.js b/benchmark/webstorage/getItem.js new file mode 100644 index 00000000000000..c383f91ee0d75b --- /dev/null +++ b/benchmark/webstorage/getItem.js @@ -0,0 +1,75 @@ +'use strict'; +const { join } = require('node:path'); +const common = require('../common.js'); +const tmpdir = require('../../test/common/tmpdir'); + +let cnt = 0; + +tmpdir.refresh(); + +function nextLocalStorage() { + return join(tmpdir.path, `${++cnt}.localstorage`); +} + +const options = { + flags: ['--experimental-webstorage', `--localstorage-file=${nextLocalStorage()}`], +}; + +const bench = common.createBenchmark(main, { + type: ['localStorage-getItem', + 'localStorage-getter', + 'sessionStorage-getItem', + 'sessionStorage-getter'], + // Note: web storage has only 10mb quota + n: [1e5], +}, options); + +function fillStorage(storage, n) { + for (let i = 0; i < n; i++) { + storage.setItem(i, i); + } +} + +function main({ n, type }) { + const localStorage = globalThis.localStorage; + const sessionStorage = globalThis.sessionStorage; + + switch (type) { + case 'localStorage-getItem': + fillStorage(localStorage, n); + bench.start(); + for (let i = 0; i < n; i++) { + localStorage.getItem(i); + } + bench.end(n); + break; + case 'localStorage-getter': + fillStorage(localStorage, n); + bench.start(); + for (let i = 0; i < n; i++) { + // eslint-disable-next-line no-unused-expressions + localStorage[i]; + } + bench.end(n); + break; + case 'sessionStorage-getItem': + fillStorage(sessionStorage, n); + bench.start(); + for (let i = 0; i < n; i++) { + sessionStorage.getItem(i); + } + bench.end(n); + break; + case 'sessionStorage-getter': + fillStorage(sessionStorage, n); + bench.start(); + for (let i = 0; i < n; i++) { + // eslint-disable-next-line no-unused-expressions + sessionStorage[i]; + } + bench.end(n); + break; + default: + new Error('Invalid type'); + } +} diff --git a/benchmark/webstorage/removeItem.js b/benchmark/webstorage/removeItem.js new file mode 100644 index 00000000000000..9592e01a0bd2a6 --- /dev/null +++ b/benchmark/webstorage/removeItem.js @@ -0,0 +1,55 @@ +'use strict'; +const { join } = require('node:path'); +const common = require('../common.js'); +const tmpdir = require('../../test/common/tmpdir'); + +let cnt = 0; + +tmpdir.refresh(); + +function nextLocalStorage() { + return join(tmpdir.path, `${++cnt}.localstorage`); +} + +const options = { + flags: ['--experimental-webstorage', `--localstorage-file=${nextLocalStorage()}`], +}; + +const bench = common.createBenchmark(main, { + type: ['localStorage', + 'sessionStorage'], + // Note: web storage has only 10mb quota + n: [1e5], +}, options); + +function fillStorage(storage, n) { + for (let i = 0; i < n; i++) { + storage.setItem(i, i); + } +} + +function main({ n, type }) { + const localStorage = globalThis.localStorage; + const sessionStorage = globalThis.sessionStorage; + + switch (type) { + case 'localStorage': + fillStorage(localStorage, n); + bench.start(); + for (let i = 0; i < n; i++) { + localStorage.removeItem(i); + } + bench.end(n); + break; + case 'sessionStorage': + fillStorage(sessionStorage, n); + bench.start(); + for (let i = 0; i < n; i++) { + sessionStorage.removeItem(i); + } + bench.end(n); + break; + default: + new Error('Invalid type'); + } +} diff --git a/benchmark/webstorage/setItem.js b/benchmark/webstorage/setItem.js new file mode 100644 index 00000000000000..e6ef2f866de05a --- /dev/null +++ b/benchmark/webstorage/setItem.js @@ -0,0 +1,63 @@ +'use strict'; +const { join } = require('node:path'); +const common = require('../common.js'); +const tmpdir = require('../../test/common/tmpdir'); + +let cnt = 0; + +tmpdir.refresh(); + +function nextLocalStorage() { + return join(tmpdir.path, `${++cnt}.localstorage`); +} + +const options = { + flags: ['--experimental-webstorage', `--localstorage-file=${nextLocalStorage()}`], +}; + +const bench = common.createBenchmark(main, { + type: ['localStorage-setItem', + 'localStorage-setter', + 'sessionStorage-setItem', + 'sessionStorage-setter'], + // Note: web storage has only 10mb quota + n: [1e5], +}, options); + +function main({ n, type }) { + const localStorage = globalThis.localStorage; + const sessionStorage = globalThis.sessionStorage; + + switch (type) { + case 'localStorage-setItem': + bench.start(); + for (let i = 0; i < n; i++) { + localStorage.setItem(i, i); + } + bench.end(n); + break; + case 'localStorage-setter': + bench.start(); + for (let i = 0; i < n; i++) { + localStorage[i] = i; + } + bench.end(n); + break; + case 'sessionStorage-setItem': + bench.start(); + for (let i = 0; i < n; i++) { + sessionStorage.setItem(i, i); + } + bench.end(n); + break; + case 'sessionStorage-setter': + bench.start(); + for (let i = 0; i < n; i++) { + sessionStorage[i] = i; + } + bench.end(n); + break; + default: + new Error('Invalid type'); + } +}