JSブラウザlocalStorageストレージ上限の取得
7434 ワード
基本的な考え方:文字列に文字を増やし続け、localStorageを呼び出す.setItemは、格納できないまで格納されます(exceeded the quota:限度額を超えます).
注意事項:で与えられた文字列は小さすぎてはいけません.そうしないと、jsコードの実行が非常に遅くなり、大きすぎてはいけません.そうしないと、大きな誤差をもたらします. まずlocalStorageをオーバーリミットさせる初期の文字列を2倍に重ねて取得し、その半分を取り、半分の半分を減らして、オーバーリミットしているかどうかを判断し、なければ、説明データ量が足りないので、半分の半分の半分を加えて、オーバーリミットしている場合は、説明データ量が多すぎて、半分の半分を減らして、1回に半分の値が0になるまで内押しします. の異なるブラウザタイプとバージョンでは、対応するlocalStorageストレージが一致しない可能性があります.
注意事項:
// 5MB: 5242880
function getLocalStorageSize () {
let str = '1'
while(1) {
// str localStorage
str += str
try {
localStorage.removeItem('cache')
localStorage.setItem('cache', str)
} catch (err) {
console.log(err.name)
break;
}
}
console.log(str.length) // 8388608
let half = str.length / 2
let isAdd = 0
let len = str.length
let resStr = ''
while (half) {
half = Math.floor(half / 2)
if (isAdd) {
//
len = len + half
} else {
//
len = len - half
}
resStr = str.slice(0, len)
try {
localStorage.removeItem('cache')
localStorage.setItem('cache', resStr)
isAdd = 1
} catch (err) {
console.log('err', err)
// err DOMException: Failed to execute 'setItem' on 'Storage': Setting the value of 'cache' exceeded the quota.
isAdd = 0
}
}
console.log(`chrome: ${
resStr.length}B ${
resStr.length / 1024 / 1024}MB`) // chrome: 5242875B ≈5MB
}
getLocalStorageSize()