我想在sessionStorage中最多存储约1万个整数。我将需要JSON解析和字符串化以更新此整数数组。
这是一个可怕的主意吗?还是性能表现不太差?
答案 0 :(得分:2)
您不应出于此目的使用SessionStorage,因为它会阻塞可能导致应用程序挂起的主线程。
改为选择IndexedDb
它设计为异步且速度更快。而且它也有很好的支持:
https://caniuse.com/#search=indexeddb
希望这会有所帮助
答案 1 :(得分:1)
正如@IrkenInvader所说,在您的参考浏览器上进行测试和测量(例如,在低端移动设备上解析可能会慢得多)。
快速测试:
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
var numbers = Array.apply(null, {length: 10000}).map(Function.call, (x) => getRandomInt(100));
var start = window.performance.now();
window.sessionStorage.setItem('test', JSON.stringify(numbers));
var end = window.performance.now();
console.log("timing", end-start);
答案 2 :(得分:0)
这可能取决于JSON模块的浏览器实现以及更多其他因素。根据我在Chrome中进行的测试,JSON.stringify
比Array.join
快得多-但在解析时,String.split
似乎更快。只要您可以依赖数组内容为唯一数字,就可以String.slice(-1, 1)
JSON字符串然后将其拆分。
// Generate 10k/1m numbers in a range of 100 to 300 mio
let intsTK = [], intsM = [], min = 100000000, max = 300000000
for(let i = 0; i < 1000000; i++) {
let r = Math.random() * (max - min) + min
if(i < 10000) intsTK.push(r);
intsM.push(r);
}
function toJSON(array) {
return JSON.stringify(array);
}
function fromJSON(string) {
return JSON.parse(string);
}
function toJoined(array) {
return array.join(",");
}
function fromJoined(string) {
return string.split(",");
}
function fromJSONJoined(string) {
return string.slice(1, -1).split(",");
}
// With 10K
console.time('toJSON_10k');
let jsonTK = toJSON(intsTK);
console.timeEnd('toJSON_10k');
console.time('toJoined_10k');
let joinedTK = toJoined(intsTK);
console.timeEnd('toJoined_10k');
console.time('fromJSON_10k');
fromJSON(jsonTK);
console.timeEnd('fromJSON_10k');
console.time('fromJoined_10k');
fromJoined(joinedTK);
console.timeEnd('fromJoined_10k');
console.time('fromJSONJoined_10k');
fromJSONJoined(jsonTK);
console.timeEnd('fromJSONJoined_10k');
//With 1 million
console.time('toJSON_1m');
let jsonM = toJSON(intsM);
console.timeEnd('toJSON_1m');
console.time('toJoined_1m');
let joinedM = toJoined(intsM);
console.timeEnd('toJoined_1m');
console.time('fromJSON_1m');
fromJSON(jsonM);
console.timeEnd('fromJSON_1m');
console.time('fromJoined_1m');
fromJoined(joinedM);
console.timeEnd('fromJoined_1m');
console.time('fromJSONJoined_1m');
fromJSONJoined(jsonM);
console.timeEnd('fromJSONJoined_1m');
答案 3 :(得分:0)
您可以看一下此页面:
http://jsben.ch/wQ9RU
如您所见,它是提高Javascript性能的工具,使用[].splice()
比JSON.parse/JSON.stringify