App/uni-app離線本地存儲(chǔ)方案

5+App的離線存儲(chǔ)

HTML5+的離線本地存儲(chǔ)有如下多種方案:

HTML5標(biāo)準(zhǔn)方案:cookie饰序、localstorage没隘、sessionstorage烹俗、websql、indexedDB

HTML5Plus擴(kuò)展方案:plus.navigator.setCookie恩闻、plus.storage艺糜、plus.io、plus.sqllite

cookie(標(biāo)準(zhǔn)h5方案)

體量最小幢尚,可以設(shè)置過期時(shí)間破停。不能跨域。

localstorage(標(biāo)準(zhǔn)h5方案)

適合key尉剩、value鍵值對(duì)的存儲(chǔ)真慢,數(shù)據(jù)量一般不超過5M。是常用的輕量數(shù)據(jù)存儲(chǔ)方案边涕。不能跨域晤碘。

sessionstorage(標(biāo)準(zhǔn)h5方案)

也是鍵值對(duì),特點(diǎn)是關(guān)閉App就消失了功蜓,也不能跨webview园爷,一般不用于持久化數(shù)據(jù)保存。

websql(標(biāo)準(zhǔn)h5方案)

是手機(jī)端關(guān)系型數(shù)據(jù)庫(kù)式撼,各種手機(jī)都支持童社。注意iOS8、9的wkWebview不支持websql著隆。如果要在iOS8扰楼、9上使用websql,請(qǐng)使用uiwebview內(nèi)核美浦。

indexedDB(標(biāo)準(zhǔn)h5方案)

是HTML5里最新的數(shù)據(jù)存儲(chǔ)規(guī)范弦赖,但不是基于SQL,而是基于對(duì)象浦辨。

indexedDB性能更高蹬竖,全是異步處理,學(xué)習(xí)難度偏大流酬。最重要的是目前手機(jī)端支持度不行币厕。Android4.4以上和iOS8以上才支持indexedDB。

plus.navigator.setCookie

與HTML5的標(biāo)準(zhǔn)cookie相比芽腾,plus的擴(kuò)展主要是為了跨域旦装。所謂跨越,就是本地HTML頁(yè)面和服務(wù)器HTML頁(yè)面共享cookie數(shù)據(jù)摊滔,或者說本地頁(yè)面的js可以操作服務(wù)器頁(yè)面產(chǎn)生的cookie阴绢。如果沒有跨越需求店乐,不需要使用plus擴(kuò)展。注意iOS8以后的wkWebview不支持setcookie旱函。

plus.storage

plus.storage也是鍵值對(duì)數(shù)據(jù)存儲(chǔ)响巢。它是把OS給原生App使用的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù)封裝一層給JS使用描滔。

plus.storage沒有理論上的大小限制棒妨。也是持久化的,不會(huì)被當(dāng)做緩存清理含长。

plus.storage相比于localstorage 還有一個(gè)特點(diǎn)是可跨域券腔。當(dāng)一個(gè)存儲(chǔ)數(shù)據(jù),需要被本地和來自服務(wù)器的頁(yè)面同時(shí)讀寫時(shí)拘泞,就涉及跨域問題纷纫。此時(shí)HTML5的localstorage不能滿足需求,只能使用plus.storage陪腌。

plus.storage操作要比localstorage慢幾十毫秒辱魁,尤其是在循環(huán)里調(diào)用plus api會(huì)放大這種慢。

有網(wǎng)友封裝了一個(gè)框架诗鸭,針對(duì)key-value數(shù)據(jù)染簇,在localstorage超過5m時(shí)自動(dòng)切換到plus.storage,參考http://ask.dcloud.net.cn/article/552强岸。雖然這么做聽起來有點(diǎn)復(fù)雜锻弓,但我們對(duì)這種追求性能極致的開發(fā)者非常贊賞。

plus.io

plus.io是文件讀寫蝌箍,雖然也可以通過讀寫txt等文件存儲(chǔ)數(shù)據(jù)青灼,但并不如專業(yè)的storage和websql方便。

plus.io更多的是用于圖片等多媒體文件的本地保存妓盲。

比如圖文列表的離線使用杂拨,一般有2種做法:

圖片下載不通過img的src,而是plus.dowload下載的悯衬,先下載圖片弹沽,存好路徑后,然后img的src動(dòng)態(tài)指定文件路徑

圖片使用img的src下載甚亭,然后用canvas把img存成圖片文件贷币。下次不聯(lián)網(wǎng),img的scr直接指向本地文件

plus.sqllite

plus.sqllite是對(duì)原生的sqllite的封裝亏狰。它也是一種可以通過sql在本地增刪改查數(shù)據(jù)庫(kù)的方案役纹。

有點(diǎn)類似websql,但相對(duì)于websql而言暇唾,sqllite的好處是:

可以預(yù)置基礎(chǔ)數(shù)據(jù)庫(kù)促脉,直接打包到app里

當(dāng)手機(jī)空間不足時(shí)辰斋,websql可能會(huì)被清理,而sqllite不會(huì)瘸味。

plus.storage沒有理論上的大小限制宫仗。

有人問三方清理工具清理垃圾會(huì)不會(huì)造成某些數(shù)據(jù)丟失,這個(gè)可能性是存在的旁仿,但概率并不高藕夫,取決于清理軟件會(huì)不會(huì)分析你的存儲(chǔ)數(shù)據(jù)里哪些是可以清除的垃圾數(shù)據(jù)。除了OS的清理工具外枯冈,一般沒有root權(quán)限的清理工具是拿不到除了plus.io外的你的app的存儲(chǔ)數(shù)據(jù)的毅贮。

但ios上系統(tǒng)存儲(chǔ)空間很少的時(shí)候,系統(tǒng)會(huì)清理 cookie尘奏、localstorage滩褥、sessionstorage、websql炫加、indexedDB 的數(shù)據(jù)瑰煎,此時(shí)使用plus.storage、plus.sqllite更安全俗孝。

uni-app存儲(chǔ)

uni-app的存儲(chǔ)方案比5+app要少酒甸,因?yàn)閏ookie、localstorage驹针、sessionstorage烘挫、websql、indexedDB只有h5端支持柬甥,其他端都不支持饮六。

uni.storage的鍵值對(duì)存儲(chǔ),這個(gè)是全端支持的苛蒲。

uni-app的Storage在不同端的實(shí)現(xiàn)不同卤橄,uni.storage在app側(cè),映射為plus.storage臂外;h5側(cè)映射為localstorage窟扑;各個(gè)小程序平臺(tái)映射為其自帶的storage鍵值對(duì)存儲(chǔ):

H5端為localStorage,瀏覽器限制5M大小漏健,是緩存概念嚎货,可能會(huì)被清理

App端為原生的plus.storage,無大小限制蔫浆,不是緩存殖属,持久化

各個(gè)小程序端為其自帶的storage api,數(shù)據(jù)存儲(chǔ)生命周期跟小程序本身一致瓦盛,即除用戶主動(dòng)刪除或超過一定時(shí)間被自動(dòng)清理洗显,否則數(shù)據(jù)都一直可用外潜。

微信小程序單個(gè) key 允許存儲(chǔ)的最大數(shù)據(jù)長(zhǎng)度為 1MB,所有數(shù)據(jù)存儲(chǔ)上限為 10MB挠唆。

支付寶小程序單條數(shù)據(jù)轉(zhuǎn)換成字符串后处窥,字符串長(zhǎng)度最大200*1024。同一個(gè)支付寶用戶玄组,同一個(gè)小程序緩存總上限為10MB滔驾。

百度、頭條小程序文檔未說明大小限制

app端還支持2種方案

使用plus.io訪問文件系統(tǒng)

使用plus.sqlite訪問數(shù)據(jù)庫(kù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巧勤,一起剝皮案震驚了整個(gè)濱河市嵌灰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颅悉,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迁匠,死亡現(xiàn)場(chǎng)離奇詭異剩瓶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)城丧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門延曙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亡哄,你說我怎么就攤上這事枝缔。” “怎么了蚊惯?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵愿卸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我截型,道長(zhǎng)趴荸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任宦焦,我火速辦了婚禮发钝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘波闹。我一直安慰自己酝豪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布精堕。 她就那樣靜靜地躺著孵淘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锄码。 梳的紋絲不亂的頭發(fā)上夺英,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天晌涕,我揣著相機(jī)與錄音,去河邊找鬼痛悯。 笑死余黎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的载萌。 我是一名探鬼主播惧财,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼扭仁!你這毒婦竟也來了垮衷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤乖坠,失蹤者是張志新(化名)和其女友劉穎搀突,沒想到半個(gè)月后卒稳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栈虚,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚓庭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年却舀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巡莹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片货矮。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡含友,死狀恐怖曲初,靈堂內(nèi)的尸體忽然破棺而出卒蘸,到底是詐尸還是另有隱情雌隅,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布缸沃,位于F島的核電站恰起,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏和泌。R本人自食惡果不足惜村缸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望武氓。 院中可真熱鬧梯皿,春花似錦、人聲如沸县恕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)忠烛。三九已至属提,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冤议。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工斟薇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恕酸。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓堪滨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蕊温。 傳聞我的和親對(duì)象是個(gè)殘疾皇子袱箱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容