如果说2012年的web开发世界有什么大事的话,人们印象最深的恐怕就是localStorage的性能了,这场争论开始于Christian Heilmann写的一篇文章: There is no simple solution for localStorage(中文版:本地存储并不简单)。在这篇文章里,他得出了几个关于localStorage性能差的几个论断。除此之外,他还建议对现有api进行改变以及对于可选api(IndexedDB、webSQL)的优化。
作者:Christian Heilmann
localStorage, perhaps not so harmful
作者: John Allsopp 文章:分析了通过localStorage读写10KB的数据的时间
PSA: DOM localStorage considered harmful
结合日常工作中的使用,粗略的分析了一下 一个数据 分批次与整体存入和读取的时候 效率与性能差异
CateDta存储的是一个类目数组 文件大小在1M左右, 数组长度为40
// 存储之前 首先清空上一次的数据
window.localStorage.clear()
const CateDta = getAllData().data
let n = 10;
let time1 = new Date().getTime()
// 数组长度为50
CateDta.forEach((item,index)=>{
window.localStorage.setItem('index'+index,JSON.stringify(item))
})
let time2 = new Date().getTime()
console.log(time2-time1);
let time3 = new Date().getTime()
window.localStorage.setItem('total',JSON.stringify(CateDta))
let time4 = new Date().getTime()
console.log(time4-time3);
在谷歌上面 测试了十组结果 得出结果:
window.localStorage.clear()
console.log(JSON.stringify(window.localStorage));
const CateDta = getAllData().data
window.localStorage.setItem('total',JSON.stringify(CateDta))
let item = CateDta[0]
for(var i=0;i<50;i++){
window.localStorage.setItem('index'+i,JSON.stringify(item))
}
let time1 = new Date().getTime()
for(var i=0;i<50;i++){
window.localStorage.getItem('index'+i)
if(i===49){
console.log('majunchang');
}
}
let time2 = new Date().getTime()
console.log(time2-time1);
let time3 = new Date().getTime()
window.localStorage.getItem('total')
let time4 = new Date().getTime()
console.log(time4-time3);
在谷歌上面 测试了十组结果 计算平均值:
window.localStorage.clear()
const CateDta = getAllData().data
let n = 10;
let item = CateDta[2]
let itemStr = JSON.stringify(item)
let time1 = new Date().getTime()
for(var i=0;i<500;i++){
window.localStorage.setItem('index'+i,itemStr)
}
let time2 = new Date().getTime()
console.log(time2-time1);
var totalArr = []
for(var i=0;i<500;i++){
totalArr.push(item)
}
// 清除一下 防止内存溢出
window.localStorage.clear()
let str = JSON.stringify(totalArr)
let time3 = new Date().getTime()
window.localStorage.setItem('total',str)
let time4 = new Date().getTime()
console.log(time4-time3);
以500 为标准的时候 在谷歌上面 测试了十组结果 得出
window.localStorage.clear()
const CateDta = getAllData().data
let item = CateDta[2]
for(var i=0;i<500;i++){
window.localStorage.setItem('index'+i,JSON.stringify(item))
}
let time1 = new Date().getTime()
for(var i=0;i<500;i++){
window.localStorage.getItem('index'+i)
if(i===499){
console.log('majunchang');
}
}
let time2 = new Date().getTime()
console.log(time2-time1);
window.localStorage.clear()
var totalArr = []
for(var i=0;i<500;i++){
totalArr.push(item)
}
window.localStorage.setItem('total',JSON.stringify(totalArr))
let time3 = new Date().getTime()
window.localStorage.getItem('total')
let time4 = new Date().getTime()
console.log(time4-time3);
得出读取速度 分批次的时候 平均读取速度是7.9ms 整体存入的平均速度 16.6ms
let time1 = new Date().getTime()
for(var i=0;i<5;i++){
window.localStorage.setItem('total'+i,JSON.stringify(CateDta))
}
let time2 = new Date().getTime()
console.log(time2-time1);
let time3 = new Date().getTime()
let arr = []
for(var i=0;i<5;i++){
arr.push(CateDta)
}
window.localStorage.setItem('total',JSON.stringify(arr))
let time4 = new Date().getTime()
console.log(time4-time3);
在谷歌上面 测试了十组结果: 分别存入 存入5次 平均值是47.6ms 整体存入 存入5次的话 37.5ms
https://www.cnblogs.com/shinnyChen/p/3779782.html