1. 程式人生 > >瀏覽器快取機制(四)——sessionStorage和localStorage

瀏覽器快取機制(四)——sessionStorage和localStorage

一.Web Storage

Web Storage是HTML5提出的本地儲存機制,主要目的是克服cookie的一些限制,當資料需要被嚴格控制在客戶端上時,無需持續的將資料發回伺服器。

優點:

  • 大量資料的儲存(也有限制,因瀏覽器而異,每個來源2.5M/5M)
  • 資料不是由每個伺服器請求傳遞的,而是隻有在請求時使用資料。它使在不影響網站效能的情況下儲存大量資料成為可能。
  • 跨會話

缺陷:

  • 因為WebStorage API屬於一種同步API,所以在儲存大資料量或儲存物件時的效能不高。
  • 因為缺乏索引,所以在針對大資料量或物件進行搜尋時的效能不高。
  • 因為目前主流瀏覽器均只支援在WebStorage中儲存字串資料,所以當儲存物件時必須先將其轉換為JSON字串後進行儲存,當獲取物件時必須先將取出的字串後將其還原為物件,所以導致針對物件進行存取操作時的效能不高。

分類:

Web Storage提供了兩種在客戶端儲存資料的方法:

  • localStorage - 沒有時間限制的資料儲存
  • sessionStorage - 針對一個 session 的資料儲存

瀏覽器相容性:

localStorage, sessionStorage都是瀏覽器的物件,絕大部分現代瀏覽器中已經得到了很好的支援,但是既然是絕大部分,就必須照顧那些還不支援這兩個物件的瀏覽器。為了檢測瀏覽器是否支援這兩個物件,我們可以簡單的用下面的程式碼來檢測:

function storageSupport() {  
        try {  
            return
'localStorage' in window && window['localStorage'] !== null; } catch (e) { return false; } }

使用方式:
這裡寫圖片描述

注:localStorage, sessionStorage都是Storage型別的例項,Storage型別只能儲存字串,非字串的資料在儲存前會被轉化成字串。

二.sessionStorage

sessionStorage 是個全域性物件,它維護著在頁面會話(page session)期間有效的儲存空間。只要瀏覽器開著,頁面會話週期就會一直持續。

當頁面重新載入(reload)或者被恢復(restores)時,頁面會話也是一直存在。

每在新標籤或者新視窗中開啟一個新頁面,都會初始化一個新的會話。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script>
        window.onload=function () {
            sessionStorage.setItem("myname","zhoujie");
            alert(sessionStorage.getItem("myname"))

        }
    </script>
</body>
</html>

當我在瀏覽器開啟時,會彈出”zhoujie”,資料會在本地進行儲存,
有圖有真相:
這裡寫圖片描述
接下來我將sessionStorage.setItem(“myname”,”zhoujie”);註釋掉,再重新整理頁面,還是會彈出正確的myname。

但在我註釋掉設定語句後,再開啟一個新視窗,或者重新關掉瀏覽器重新開啟時,資料就會被清除。
這裡寫圖片描述

這裡寫圖片描述

二.localStorage

localStorage是跨多個視窗,且持續範圍可超過當前會話;意味著當瀏覽器關閉再重新開啟,資料依然是可用的。資料保留到通過js刪除或使用者清除瀏覽器快取。

上程式碼:

<body>
    <script>
        window.onload=function () {
            localStorage.setItem("myname","zhoujie");
            alert(localStorage.getItem("myname"))
        }
    </script>
</body>

這時我開啟瀏覽器,會彈出”zhoujie”。看看本地的儲存情況:
這裡寫圖片描述

接著我註釋掉設定程式碼,關掉瀏覽器重新開啟,還是會彈出“zhoujie”,並且資料依然在。
這裡寫圖片描述