Skip to content

Instantly share code, notes, and snippets.

@sftblw
Last active February 2, 2021 14:36
Show Gist options
  • Save sftblw/e004ef1c44491144433fadc6de0f4521 to your computer and use it in GitHub Desktop.
Save sftblw/e004ef1c44491144433fadc6de0f4521 to your computer and use it in GitHub Desktop.
browser.storage.local performance test
browser.storage.sync.remove("data_obj")
browser.storage.sync.remove("data_str")
function measureThem(repeatCount, lambda) {
performance.clearMarks();
performance.clearMeasures();
const marker = "name"
performance.mark(marker);
for (let i = 0; i < repeatCount; i++) {
lambda();
performance.measure(`${marker} - ${i}`);
}
let entries = performance.getEntriesByType("measure")
let times = entries.map( (item) => item.duration );
console.log(times)
console.log(`avg: ${times.reduce((a, b) => a+b) / repeatCount}, all: ${times.join(", ")}`);
}
var data_str = '{"a_key_0":123,"a_key_1":133,"a_key_2":143,"a_key_3":153,"a_key_4":163,"a_key_5":173,"a_key_6":183,"a_key_7":193,"a_key_8":203,"a_key_9":213,"a_key_10":223,"a_key_11":233,"a_key_12":243,"a_key_13":253,"a_key_14":263,"a_key_15":273,"a_key_16":283,"a_key_17":293,"a_key_18":303,"a_key_19":313,"a_key_20":323,"a_key_21":333,"a_key_22":343,"a_key_23":353,"a_key_24":363,"a_key_25":373,"a_key_26":383,"a_key_27":393,"a_key_28":403,"a_key_29":413,"a_key_30":423,"a_key_31":433,"a_key_32":443,"a_key_33":453,"a_key_34":463,"a_key_35":473,"a_key_36":483,"a_key_37":493,"a_key_38":503,"a_key_39":513,"a_key_40":523,"a_key_41":533,"a_key_42":543,"a_key_43":553,"a_key_44":563,"a_key_45":573,"a_key_46":583,"a_key_47":593,"a_key_48":603,"a_key_49":613,"a_key_50":623,"a_key_51":633,"a_key_52":643,"a_key_53":653,"a_key_54":663,"a_key_55":673,"a_key_56":683,"a_key_57":693,"a_key_58":703,"a_key_59":713,"a_key_60":723,"a_key_61":733,"a_key_62":743,"a_key_63":753,"a_key_64":763,"a_key_65":773,"a_key_66":783,"a_key_67":793,"a_key_68":803,"a_key_69":813,"a_key_70":823,"a_key_71":833,"a_key_72":843,"a_key_73":853,"a_key_74":863,"a_key_75":873,"a_key_76":883,"a_key_77":893,"a_key_78":903,"a_key_79":913,"a_key_80":923,"a_key_81":933,"a_key_82":943,"a_key_83":953,"a_key_84":963,"a_key_85":973,"a_key_86":983,"a_key_87":993,"a_key_88":1003,"a_key_89":1013,"a_key_90":1023,"a_key_91":1033,"a_key_92":1043,"a_key_93":1053,"a_key_94":1063,"a_key_95":1073,"a_key_96":1083,"a_key_97":1093,"a_key_98":1103,"a_key_99":1113,"a_key_100":1123,"a_key_101":1133,"a_key_102":1143,"a_key_103":1153,"a_key_104":1163,"a_key_105":1173,"a_key_106":1183,"a_key_107":1193,"a_key_108":1203,"a_key_109":1213,"a_key_110":1223,"a_key_111":1233,"a_key_112":1243,"a_key_113":1253,"a_key_114":1263,"a_key_115":1273,"a_key_116":1283,"a_key_117":1293,"a_key_118":1303,"a_key_119":1313,"a_key_120":1323,"a_key_121":1333,"a_key_122":1343,"a_key_123":1353,"a_key_124":1363,"a_key_125":1373,"a_key_126":1383,"a_key_127":1393,"a_key_128":1403,"a_key_129":1413,"a_key_130":1423,"a_key_131":1433,"a_key_132":1443,"a_key_133":1453,"a_key_134":1463,"a_key_135":1473,"a_key_136":1483,"a_key_137":1493,"a_key_138":1503,"a_key_139":1513,"a_key_140":1523,"a_key_141":1533,"a_key_142":1543,"a_key_143":1553,"a_key_144":1563,"a_key_145":1573,"a_key_146":1583,"a_key_147":1593,"a_key_148":1603,"a_key_149":1613,"a_key_150":1623,"a_key_151":1633,"a_key_152":1643,"a_key_153":1653,"a_key_154":1663,"a_key_155":1673,"a_key_156":1683,"a_key_157":1693,"a_key_158":1703,"a_key_159":1713,"a_key_160":1723,"a_key_161":1733,"a_key_162":1743,"a_key_163":1753,"a_key_164":1763,"a_key_165":1773,"a_key_166":1783,"a_key_167":1793,"a_key_168":1803,"a_key_169":1813,"a_key_170":1823,"a_key_171":1833,"a_key_172":1843,"a_key_173":1853,"a_key_174":1863,"a_key_175":1873,"a_key_176":1883,"a_key_177":1893,"a_key_178":1903,"a_key_179":1913,"a_key_180":1923,"a_key_181":1933,"a_key_182":1943,"a_key_183":1953,"a_key_184":1963,"a_key_185":1973,"a_key_186":1983,"a_key_187":1993,"a_key_188":2003,"a_key_189":2013,"a_key_190":2023,"a_key_191":2033,"a_key_192":2043,"a_key_193":2053,"a_key_194":2063,"a_key_195":2073,"a_key_196":2083,"a_key_197":2093,"a_key_198":2103,"a_key_199":2113,"a_key_200":2123,"a_key_201":2133,"a_key_202":2143,"a_key_203":2153,"a_key_204":2163,"a_key_205":2173,"a_key_206":2183,"a_key_207":2193,"a_key_208":2203,"a_key_209":2213,"a_key_210":2223,"a_key_211":2233,"a_key_212":2243,"a_key_213":2253,"a_key_214":2263,"a_key_215":2273,"a_key_216":2283,"a_key_217":2293,"a_key_218":2303,"a_key_219":2313,"a_key_220":2323,"a_key_221":2333,"a_key_222":2343,"a_key_223":2353,"a_key_224":2363,"a_key_225":2373,"a_key_226":2383,"a_key_227":2393,"a_key_228":2403,"a_key_229":2413,"a_key_230":2423,"a_key_231":2433,"a_key_232":2443,"a_key_233":2453,"a_key_234":2463,"a_key_235":2473,"a_key_236":2483,"a_key_237":2493,"a_key_238":2503,"a_key_239":2513,"a_key_240":2523,"a_key_241":2533,"a_key_242":2543,"a_key_243":2553,"a_key_244":2563,"a_key_245":2573,"a_key_246":2583,"a_key_247":2593,"a_key_248":2603,"a_key_249":2613,"a_key_250":2623,"a_key_251":2633,"a_key_252":2643,"a_key_253":2653,"a_key_254":2663,"a_key_255":2673,"a_key_256":2683,"a_key_257":2693,"a_key_258":2703,"a_key_259":2713,"a_key_260":2723,"a_key_261":2733,"a_key_262":2743,"a_key_263":2753,"a_key_264":2763,"a_key_265":2773,"a_key_266":2783,"a_key_267":2793,"a_key_268":2803,"a_key_269":2813,"a_key_270":2823,"a_key_271":2833,"a_key_272":2843,"a_key_273":2853,"a_key_274":2863,"a_key_275":2873,"a_key_276":2883,"a_key_277":2893,"a_key_278":2903,"a_key_279":2913,"a_key_280":2923,"a_key_281":2933,"a_key_282":2943,"a_key_283":2953,"a_key_284":2963,"a_key_285":2973,"a_key_286":2983,"a_key_287":2993,"a_key_288":3003,"a_key_289":3013,"a_key_290":3023,"a_key_291":3033,"a_key_292":3043,"a_key_293":3053,"a_key_294":3063,"a_key_295":3073,"a_key_296":3083,"a_key_297":3093,"a_key_298":3103,"a_key_299":3113,"a_key_300":3123}'
var data_obj = JSON.parse(data_str)
async function test(repeat, lambda) {
var perfs = []
for(var i = 0; i < repeat; i++) {
var now = performance.now()
await lambda()
var perf = performance.now() - now
perfs.push(perf)
// console.log(perf)
}
console.log("average " + perfs.reduce((a, b) => a + b) / repeat)
console.log(perfs)
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
console.log("local")
await browser.storage.local.set({"data_obj": null})
console.log("data_obj write")
await test(100, () => browser.storage.local.set({"data_obj": data_obj}) )
console.log("data_str write")
await test(100, () => browser.storage.local.set({"data_str": data_str}) )
console.log("data_obj read")
await test(100, () => browser.storage.local.get("data_obj") )
console.log("data_str read")
await test(100, () => browser.storage.local.get("data_str") )
console.log("sync")
await sleep(1000)
console.log("data_obj write")
await test(100, () => browser.storage.sync.set({"data_obj": data_obj}) )
await sleep(5000)
console.log("data_str write")
await test(100, () => browser.storage.sync.set({"data_str": data_str}) )
await sleep(5000)
console.log("data_obj read")
await test(100, () => browser.storage.sync.get("data_obj") )
await sleep(5000)
console.log("data_str read")
await test(100, () => browser.storage.sync.get("data_str") )
browser.storage.sync.remove("data_obj")
browser.storage.sync.remove("data_str")

local

. obj write
write 1.52 0.62
read 0.56 0.28

local more data

. obj write
write 27.8 2.98
read 8.71 1.14

sync

. obj write
write 2.76 2
read 1.08 0.48
local
data_obj write
average 1.52
Array(100) [ 1, 2, 3, 1, 1, 2, 2, 1, 1, 2, … ]
data_str write
average 0.62
Array(100) [ 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, … ]
data_obj read
average 0.56
Array(100) [ 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, … ]
data_str read
average 0.28
Array(100) [ 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, … ]
sync
data_obj write
average 2.76
Array(100) [ 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, … ]
data_str write
average 2
Array(100) [ 2, 4, 1, 2, 2, 2, 2, 2, 3, 1, … ]
data_obj read
average 1.08
Array(100) [ 1, 1, 3, 2, 1, 2, 2, 1, 1, 1, … ]
data_str read
average 0.48
Array(100) [ 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, … ]
null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment