2017-10
在前端開發(fā)過程中會遇到數(shù)據(jù)存儲問題璃诀,HTML5的原本存儲有以下幾種方案
HTML5標準方案:cookie、localstorage逗堵、sessionstorage叶眉、websql、indexedDB
cookie
體量最小僻焚,可以設置過期時間允悦。不能跨域。
localstorage
適合key虑啤、value鍵值對的存儲隙弛,數(shù)據(jù)量一般不超過5M。是常用的輕量數(shù)據(jù)存儲方案狞山。不能跨域全闷。
sessionstorage
也是鍵值對,特點是關閉App就消失了萍启,也不能跨webview室埋,一般不用于持久化數(shù)據(jù)保存。
websql
是手機端關系型數(shù)據(jù)庫的最佳方案伊约,各種手機都支持姚淆。只是該標準不再更新。但是目前手機端重量數(shù)據(jù)存儲的唯一可商用方案屡律。注意iOS8腌逢、9的wkWebview不支持websql。
indexedDB
是HTML5里最新的數(shù)據(jù)存儲規(guī)范超埋,但不是基于SQL搏讶,而是基于對象佳鳖。
indexedDB性能更高,全是異步處理媒惕,學習難度偏大系吩。最重要的是目前手機端支持度不行。Android4.4以上和iOS8以上才支持indexedDB妒蔚。
在移動APP開發(fā)中穿挨,使用html5+的話則可以使用HTML5+擴展方案:plus.navigator.setCookie、plus.storage肴盏、plus.io來進行書記存儲
plus.navigator.setCookie
與HTML5的標準cookie相比科盛,plus的擴展主要是為了跨域。所謂跨越菜皂,就是本地HTML頁面和服務器HTML頁面共享cookie數(shù)據(jù)贞绵,或者說本地頁面的js可以操作服務器頁面產生的cookie。如果沒有跨越需求恍飘,不需要使用plus擴展榨崩。注意iOS8以后的wkWebview不支持setcookie。
plus.storageplus.storage
也是鍵值對數(shù)據(jù)存儲章母。它是把OS給原生App使用的鍵值對存儲數(shù)據(jù)庫封裝一層給JS使用蜡饵。plus.storage沒有理論上的大小限制。plus.storage相比于localstorage 還有一個特點是可跨域胳施。當一個存儲數(shù)據(jù),需要被本地和來自服務器的頁面同時讀寫時肢专,就涉及跨域問題舞肆。此時HTML5的localstorage不能滿足需求,只能使用plus.storage博杖。plus.storage操作要比localstorage慢幾十毫秒椿胯,尤其是在循環(huán)里調用plus api會放大這種慢。如果不是因為大小限制或跨越剃根,盡量使用localstorage哩盲。有網友封裝了一個框架,針對key-value數(shù)據(jù)狈醉,在localstorage超過5m時自動切換到plus.storage廉油,參考http://ask.dcloud.net.cn/article/552。雖然這么做聽起來有點復雜苗傅,但我們對這種追求性能極致的開發(fā)者非常贊賞抒线。
plus.ioplus.io
是文件讀寫,雖然也可以通過讀寫txt等文件存儲數(shù)據(jù)渣慕,但并不如專業(yè)的storage和websql方便嘶炭。plus.io更多的是用于圖片等多媒體文件的本地保存抱慌。
本人使用的是HBuilder,開發(fā)移動APP