## 第一節:概述
隨著瀏覽器的功能不斷增強,越來越多的網站開始考慮,將大量數據儲存在客戶端,這樣可以減少從服務器獲取數據,直接從本地獲取數據。
現有的瀏覽器數據儲存方案,都不適合儲存大量數據:`Cookie`的大小不超過 4KB,且每次請求都會發送回服務器;`LocalStorage`在 2.5MB 到 10MB 之間(各家瀏覽器不同),而且不提供搜索功能,不能建立自定義的索引。所以,需要一種新的解決方案,這就是 `IndexedDB`誕生的背景。
通俗地說,`IndexedDB`就是瀏覽器提供的本地數據庫,它可以被網頁腳本創建和操作。`IndexedDB`允許儲存大量數據,提供查找接口,還能建立索引。這些都是`LocalStorage`所不具備的。就數據庫類型而言,`IndexedDB`不屬于關系型數據庫(不支持 SQL 查詢語句),更接近`NoSQL`數據庫。
`IndexedDB`具有以下特點。
**(1)鍵值對儲存**。`IndexedDB`內部采用對象倉庫(object store)存放數據。所有類型的數據都可以直接存入,包括 JavaScript 對象。對象倉庫中,數據以“鍵值對”的形式保存,每一個數據記錄都有對應的主鍵,主鍵是獨一無二的,不能有重復,否則會拋出一個錯誤。
**(2)異步**。`IndexedDB`操作時不會鎖死瀏覽器,用戶依然可以進行其他操作,這與`LocalStorage`形成對比,后者的操作是同步的。異步設計是為了防止大量數據的讀寫,拖慢網頁的表現。
**(3)支持事務**。`IndexedDB`支持事務(transaction),這意味著一系列操作步驟之中,只要有一步失敗,整個事務就都取消,數據庫回滾到事務發生之前的狀態,不存在只改寫一部分數據的情況。
**(4)同源限制**。`IndexedDB`受到同源限制,每一個數據庫對應創建它的域名。網頁只能訪問自身域名下的數據庫,而不能訪問跨域的數據庫。
**(5)儲存空間大**。`IndexedDB`的儲存空間比`LocalStorage`大得多,一般來說不少于 250MB,甚至沒有上限。
**(6)支持二進制儲存**。`IndexedDB`不僅可以儲存字符串,還可以儲存二進制數據(`ArrayBuffer`對象和`Blob`對象)。
- 第一章:音視頻
- 第一節:概述
- 第二節:媒體元素
- 第三節:視頻元素
- 第四節:音頻元素
- 第四節:事件
- 第二章:高德地圖
- 第三章:Storage 接口
- 第一節:概述
- 第二節:屬性和方法
- 第三節:事件
- 第四章:IndexedDB
- 第一節:概述
- 第二節:基本概念
- 第三節:indexedDB 對象
- 第四節:IDBRequest 對象
- 第五節:IDBDatabase 對象
- 第六節:IDBObjectStore 對象
- 第七節:IDBTransaction 對象
- 第八節:IDBIndex 對象
- 第九節:IDBCursor 對象
- 第十節:IDBKeyRange 對象
- 第十一節:操作流程
- 第五章:Canvas
- 第一節:概述
- 第二節:繪制圖像
- 第一課時:路徑
- 第二課時:線型
- 第三課時:矩形
- 第四課時:弧線
- 第五課時:文本
- 第六課時:漸變色和圖像填充
- 第七課時:陰影
- 第三節:圖像處理
- 第一課時:寫入圖像
- 第二課時:像素讀寫
- 第三課時:保存和恢復
- 第四課時:畫布
- 第五課時:圖像變換
- 第四節:元素方法
- 第一課時:toDataURL()
- 第二課時:toBlob()
- 第五節:使用實例
- 第一課時:動畫效果
- 第二課時:像素處理