日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IndexedDB技术简介(一)(转)

發(fā)布時(shí)間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IndexedDB技术简介(一)(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

IndexedDB?是HTML5中的一種數(shù)據(jù)存儲方式。用來幫助網(wǎng)站,在瀏覽器本地,存儲結(jié)構(gòu)比較復(fù)雜的數(shù)據(jù)。它和HTML5中其它的數(shù)據(jù)存儲方式有一些共性:

1.和我們熟知的cookies類似,IndexedDB是每個(gè)域名獨(dú)立存儲數(shù)據(jù)的。
對cookies不熟悉的童鞋,可以順便學(xué)習(xí)一下cookies,不過這不影響大家理解IndexedDB。網(wǎng)上cookies的教材和文章非常多,這里不一一列舉。

2.和localStorage相比,IndexedDB可以存儲任意格式的json object,而localStorage則只能存string,我們在使用localStorage存儲復(fù)雜數(shù)據(jù)的時(shí)候,常常會協(xié)同JSON.parse和JSON.stringify一起工作,而IndexedDB則可以直接存取對象,無需轉(zhuǎn)換成字符串。
對localStorage不熟悉的童鞋,可以查閱w3c官方文檔,這里有一份我參與翻譯的中文版文檔,這里還有一些localStorage的使用建議。

3.和web sql database類似,IndexedDB也分?jǐn)?shù)據(jù)庫,每個(gè)數(shù)據(jù)庫可以建立多個(gè)不同配置的表,而且所有的操作都在事務(wù)(transaction)中完成,不同之處在于web sql database是通過SQL執(zhí)行語句來完成操作的,而IndexedDB則直接通過JS API完成操作。
需要指出的是,web sql database規(guī)范已經(jīng)被w3c拋棄,對此不熟的朋友,也不必學(xué)習(xí)了,如果有童鞋想嘗試的,可以找一款webkit瀏覽器試試看(傲游3、chrome、safari)

IndexedDB的整體存儲結(jié)構(gòu)

見下圖,IndexedDB(以下簡稱IDB)嚴(yán)格遵循w3c的同源策略,每個(gè)源都擁有獨(dú)立的大存儲空間;每個(gè)大存儲空間內(nèi),又可以通過當(dāng)前源下的頁面腳本創(chuàng)建多個(gè)數(shù)據(jù)庫;每個(gè)數(shù)據(jù)庫可以包含多個(gè)表(ObjectStore);每個(gè)表都是一個(gè)json對象列表,可以存儲多個(gè)json對象,比如{"name": "jinjiang", "age": 26}。


ObjectStore中的key

不同的源、不同的數(shù)據(jù)庫、不同的表、不同的對象,都是如何識別的呢?不同的源直接通過域名進(jìn)行識別,比如weibo.com、maxthon.cn、renren.com;不同的數(shù)據(jù)庫通過一個(gè)字符串(name)識別,比如"blog"、"bbs"、"wiki"等;不同的表也通過一個(gè)字符串(name)識別,比如"users"、"contacts"、"articles"等;上面這些識別方式都很好理解,不太好理解的,是如何在表(ObjectStore)中識別不同的json對象,即key。

IDB為ObjectStore提供了兩種key:
1.鍵值對(out-of-line keys: key-value pair)
2.鍵路徑(inline keys: keyPath)

第1種是比較好理解的,就像localStorage中的鍵值對類似,一個(gè)key對應(yīng)一個(gè)value,不同的時(shí),localStorage中的key和value都是字符串類型的,而IDB中的key和value都可以是其它json對象。比如

"a" => "b"
[3, 7] => 21

第2種是通過value中的某個(gè)屬性字段直接用作key。因?yàn)関alue都是json數(shù)據(jù),所以我們可以這樣做,假如我們想創(chuàng)建一個(gè)表,里面的數(shù)據(jù)是類似這種感覺的:

{profile: {id: 1, name: "葛優(yōu)"}, girls: [...]}
{profile: {id: 7, name: "James Bond"}, girls: [...]}
{profile: {id: 8, name: "周星馳"}, girls: [...]}

那么我們就可以把profile里的id作為key,方法是為這個(gè)表指定一個(gè)keyPath

keyPath => 'profile.id'

這樣ObjectStore就會自動按照每個(gè)value的value.profile.id進(jìn)行識別和匹配。

以上就是2種json對象的識別方式。除此之外,我們還可以為ObjectStore加入自增id特性(key generator),這一特性可以讓IDB在添加數(shù)據(jù)時(shí)自動分配一個(gè)唯一的key,如果是第2種key,IDB還會把key存在響應(yīng)的keyPath下。

以上就是對IndexedDB存數(shù)結(jié)構(gòu)的介紹,先告一段落。
下一篇文章,會通過簡單的接口介紹,幫助大家進(jìn)一步認(rèn)識IndexedDB。

轉(zhuǎn)載于:https://www.cnblogs.com/tingzi/archive/2012/08/07/2626621.html

總結(jié)

以上是生活随笔為你收集整理的IndexedDB技术简介(一)(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。