【JS】第23章 離線應用與客戶端緩存

一、離線檢測

navigation.onLine(H5的屬性)、online、offline(H5的事件)

二、應用緩存

1. Appcache 是從瀏覽器的緩存中分出來的一塊緩存區,要想在這個緩存中保存數據,可以使用一個描述文件(manifest file),列出要下載和緩存的資源。

2. 查看應用緩存的狀態:applicationCache 對象(JS的API)的 status 屬性

3. 應用緩存的事件,表示其狀態的改變:checking、error、noupdate、downloading、progress、updateready、cached

4. applicationCache.update():應用緩存去檢查描述文件是否更新,觸發 checking 事件
    applicationCache.swapCache():啓用新應用緩存

三、數據存儲

1. Cookie:cookie 在客戶端和服務器之間來回傳遞,以鍵值對的形式存儲,並進行 URL 編碼。

(1)限制:遵循同源策略、存儲數量有限、存儲大小有限(大約 4KB)

(2)構成:名稱(name)、值(value)、域(domain)、路徑(path)、失效時間(expires)、安全標誌(secure)

其中,名稱和值必須經過 URL 編碼,失效時間默認爲瀏覽器會話期間,安全標誌則代表 cookie 只有在使用 SSL 連接時才發送到服務器。

(3)JS 中的 cookie:document.cookie(BOM 屬性)、encodeURIComponent()- 編碼、decodeURIComponent()- 解碼

基本的 cookie 操作有三種:讀取(get)、寫入(set)和刪除(unset),詳見紅寶書。

(4)子 cookie

2. IE 用戶數據:持久化用戶數據,遵循同源策略,用戶數據允許每個文檔最多 128KB 數據,每一個域名最多 1M 數據。要使用的話,首先需要使用 CSS 在某個元素上指定 userData 行爲。

  • setAttribute()- 保存數據
  • getAttribute()- 獲取數據
  • removeAttribute()- 刪除數據
  • save()- 在保存和刪除數據後都要調用此方法來提交更改

3. Web 存儲機制:Storage 類型,包括 sessionStorage 對象、globalStorage 對象的屬性(已被 localStorage 對象替代)、localStorage 對象,這三個都是 Storage 的實例。

(1)Storage 類型:只能存儲字符串,非字符串會被轉換成字符串。存儲大小(5M 左右)。

  • setItem(name,value)- 爲指定的 name 設置一個對應的值
  • getItem(name)- 根據指定的 name 獲取對應的值
  • removeItem(name)- 刪除由 name 指定的名值對兒
  • clear()- 刪除所有值;Firefox 中沒有實現
  • key(index)- 獲得 index 位置處的值的名字
  • length 屬性 - 判斷存儲的名值對兒的數目 
  • remainingSpace 屬性 - 剩餘存儲空間的字節數
  • delete 操作符

(2)sessionStorage 對象:瀏覽器會話期間有效,屬性方法同上。如果 在IE8 中要將數據強行寫入磁盤,在設置新數據之前使用 begin()方法,並且在所有設置完成之後調用 commit()方法。

(3)globalStorage 對象:遵循同源策略,長久保存,屬性方法同上,可以設置訪問規則。

(4)localStorage 對象:遵循同源策略,長久保存,屬性方法同上,不可以設置訪問規則。

4. IndexedDB:是在瀏覽器中保存結構化數據的一種數據庫。 IndexedDB 設計的操作完全是異步進行的。差不多每一次  IndexedDB 操作,都需要註冊 onerror 和 onsuccess 事件處理程序。

(1)數據庫:打開數據庫 ——  indexDB.open(數據庫名)、指定數據庫的版本號 —— db.setVersion(版本號)

(2)對象存儲空間:db.creatObjectStore()、store.add()- 插入新值、store.put()- 更新值

(3)事物:創建事物 —— db.transaction(),表示事物級的狀態信息的事件處理程序:onerror 和 oncomplete 。

objectStore()、add()、put()、delete()、clear()

(4)使用遊標查詢:openCursor()、key、value、update()、delete()、continue(key)、advance(count)

(5)鍵範圍:向 openCursor()中傳入的第一個參數:IDBkeyRange.only()、IDBkeyRange.lowerBound()、IDBkeyRange.upperBound()、IDBkeyRange.bound()

(6)設定遊標方向:向 openCursor()中傳入的第二個參數:IDBCursor.PREV 或 IDBCursor.PREV_NO_DUPLICATE

(7)索引:創建索引 —— createIndex()、index()、get()、indexNames、deleteIndex()

(8)併發問題:onversionchange()、setVersion()

(9)限制:遵循同源策略,存儲限制,訪問本地文件的限制(不同瀏覽器限制不同)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章