Web應(yīng)用的發(fā)展,使得客戶端存儲使用得也越來越多,而實(shí)現(xiàn)客戶端存儲的方式則是多種多樣。最簡單而且兼容性最佳的方案是Cookie,但是作為真正的客戶端存儲,Cookie則存在很多致命傷。此外,在IE6及以上版本中還可以使用userData Behavior、在Firefox下可以使用globalStorage、在有Flash插件的環(huán)境中可以使用Flash Local Storage,但是這幾種方式都存在兼容性方面的局限性,因此真正使用起來并不理想。針對以上情況,HTML5中給出了更加理想的解決方案:假如你需要存儲復(fù)雜的數(shù)據(jù)則可以使用Web Database,可以像客戶端程序一樣使用SQL(不過Web Database標(biāo)準(zhǔn)當(dāng)前正陷于僵局之中,而且目前已經(jīng)實(shí)現(xiàn)的瀏覽器很有限);假如你需要存儲的只是簡單的用key/value對即可解決的數(shù)據(jù)則可以使用Web Storage。 本文主要從各個(gè)方面介紹一下Web Storage的具體情況。
sessionStorage與localStorage
Web Storage實(shí)際上由兩部分組成:sessionStorage與localStorage。
sessionStorage用于本地存儲一個(gè)會話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個(gè)會話中的頁面才能訪問并且當(dāng)會話結(jié)束后數(shù)據(jù)也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲,僅僅是會話級別的存儲。
localStorage用于持久化的本地存儲,除非主動刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會過期的。
為什么選擇Web Storage而不是Cookie?
與Cookie相比,Web Storage存在不少的優(yōu)勢,概括為以下幾點(diǎn):
1. 存儲空間更大:IE8下每個(gè)獨(dú)立的存儲空間為10M,其他瀏覽器實(shí)現(xiàn)略有不同,但都比Cookie要大很多。
2. 存儲內(nèi)容不會發(fā)送到服務(wù)器:當(dāng)設(shè)置了Cookie后,Cookie的內(nèi)容會隨著請求一并發(fā)送的服務(wù)器,這對于本地存儲的數(shù)據(jù)是一種帶寬浪費(fèi)。而Web Storage中的數(shù)據(jù)則僅僅是存在本地,不會與服務(wù)器發(fā)生任何交互。
3. 更多豐富易用的接口:Web Storage提供了一套更為豐富的接口,使得數(shù)據(jù)操作更為簡便。
4. 獨(dú)立的存儲空間:每個(gè)域(包括子域)有獨(dú)立的存儲空間,各個(gè)存儲空間是完全獨(dú)立的,因此不會造成數(shù)據(jù)混亂。
兼容性如何?
接下來的各種測試是在以下瀏覽器中進(jìn)行的:IE8、Firefox3.6、Chrome5、Safari4、Opera10,事實(shí)證明各個(gè)瀏覽器在API方面的實(shí)現(xiàn)基本上一致,存在一定的兼容性問題,但不影響正常的使用。
sessionStorage測試
本節(jié)主要針對sessionStorage的一些特性進(jìn)行了測試,測試的重點(diǎn)在于各個(gè)瀏覽器對于session的定義以及跨域情況。測試方法很簡單:打開頁面A,在頁面A中寫入當(dāng)前的session數(shù)據(jù),然后通過頁面A中的鏈接或按鈕使用不同的方式進(jìn)入下頁面B,如果頁面B中能夠訪問到頁面A中的數(shù)據(jù)則說明瀏覽器將當(dāng)前情況的頁面A、B視為同一個(gè)session。測試的具體結(jié)果如表1:
表1 sessionStorage兼容性測試
從表1中可以看出,處于安全性考慮所有瀏覽器下session數(shù)據(jù)都是不允許跨域訪問的,包括跨子域也是不允許的。其他方面主流瀏覽器中的實(shí)現(xiàn)較為一致。
出處:百度泛用戶體驗(yàn)
責(zé)任編輯:bluehearts
上一頁 下一頁 Web Storage全解析 [2]
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|