儲存大小限制
localStorage 和 sessionStorage 儲存大小通常限制在 5MB ~ 10MB,最常見的限制是 5MB,不同瀏覽器限制大小不同。
以下是一些較新瀏覽器和版本的 Web Storage 儲存空間大小限制:
- Google Chrome:約為 5MB 至 10MB,視瀏覽器版本而定。
- Mozilla Firefox:約為 10MB,視瀏覽器版本而定。
- Safari:約為 5MB 至 10MB,視瀏覽器版本而定。
- Microsoft Edge:約為 10MB,視瀏覽器版本而定。
注意:瀏覽器版本可能會對儲存空間大小限制進行更改,因此這些限制僅供參考。
瀏覽器儲存限制大小檢查的方法一
以下是一個示範如何檢查當前瀏覽器的儲存限制大小的方法:
var limit = 1024 * 1024 * 10;
try {
localStorage.setItem('test', new Array(limit).join('0'));
localStorage.removeItem('test');
} catch (e) {
limit = e.toString().match(/\d+/)[0] || 5 * 1024 * 1024;
}
console.log('localStorage limit:', limit, 'bytes');
try {
sessionStorage.setItem('test', '1');
sessionStorage.removeItem('test');
} catch (e) {
limit = e.toString().match(/\d+/)[0] || 5 * 1024 * 1024;
}
console.log('sessionStorage limit:', limit, 'bytes');
上方程式會嘗試向 localStorage 和 sessionStorage 中存儲數據,如果存儲失敗,代表超過了該瀏覽器的儲存限制大小,此時可以從錯誤訊息中獲取瀏覽器的儲存限制大小。如果沒有獲取到,就預設使用 5MB 作為儲存限制大小。
瀏覽器儲存限制大小檢查的方法二
第二種檢查當前瀏覽器的儲存限制大小的方法:
if ('localStorage' in window && window['localStorage'] !== null) {
var limit = (1024 * 1024 * 5);
try {
localStorage.setItem('test', '1');
localStorage.removeItem('test');
} catch(e) {
limit = e.QUOTA_EXCEEDED_ERR;
}
console.log('localStorage limit: ' + limit + ' bytes');
}
if ('sessionStorage' in window && window['sessionStorage'] !== null) {
var limit = (1024 * 1024 * 5);
try {
sessionStorage.setItem('test', '1');
sessionStorage.removeItem('test');
} catch(e) {
limit = e.QUOTA_EXCEEDED_ERR;
}
console.log('sessionStorage limit: ' + limit + ' bytes');
}
上方程式會先檢查當前瀏覽器是否支援 localStorage 和 sessionStorage,如果支援則嘗試設置一個 Key-Value Pair 並刪除它,以確定儲存空間是否已滿。
如果儲存空間已滿,則會拋出 QUOTA_EXCEEDED_ERR
錯誤,代表超出了儲存限制大小。此時可以透過 e.QUOTA_EXCEEDED_ERR
屬性值來取得當前瀏覽器的儲存限制大小。注意不同瀏覽器和版本儲存限制大小可能會有所不同,需要在不同的環境下進行測試。
Note: Key-Value Pair(鍵值對)是一種資料結構,用來儲存一個鍵(key)和對應的值(value)。在 JavaScript 中,鍵值對可以透過物件(Object)或 Map 結構來實現。以物件為例,鍵是一個唯一的字串,值可以是任何資料型態,例如數字、字串、陣列、物件等。在使用 Web Storage API 的 localStorage 或 sessionStorage 時,鍵值對即是用來儲存資料的基本單位。
兩段程式碼的主要差異
第一段程式碼
使用一個新的陣列來填滿 localStorage,以測試 localStorage 的儲存限制大小。
它嘗試將一個包含 10MB 內容的新陣列存儲到 localStorage 中,然後再將它刪除。
如果此操作成功,它會顯示 localStorage 的儲存限制大小為 10MB。
如果存儲或刪除操作失敗,則會顯示一個默認的大小(通常是 5MB)。
第二段程式碼
只是嘗試將一個簡單的 Key-Value Pair 存儲到 sessionStorage 中,然後再將它刪除。
如果此操作成功,則說明 sessionStorage 可以正常使用,否則顯示默認大小(通常是 5MB)。
這段程式碼是檢查 sessionStorage 的儲存限制大小,與第一段程式碼檢查 localStorage 的儲存限制大小相似,但不同的是,它不需要填充任何內容。
參考資料
[1] Window.sessionStorage - Web APIs | MDN
https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
[2] Window.localStorage - Web APIs | MDN
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
[3] W3Schools - Web Storage API
https://www.w3schools.com/html/html5_webstorage.asp
[5] JavaScript.info - LocalStorage 和 SessionStorage
https://javascript.info/localstorage
相關筆記
[Day 17] 如何讓 iframe 在不影響外部的情況下關閉 - 嘗試 30 日寫文充版挑戰
Web Storage API 是什麼?
localStorage 和 sessionStorage 操作方法與介紹
localStorage 和 sessionStorage 差異與特點
localStorage 和 sessionStorage 儲存大小限制